Java中的equals和==使用

    equals方法来自于基类Object,==二目运算符,比较的是值,在java中8种基本类型比较的值,存储在栈上,一般没问题,对于对象,在java中一切皆对象,两个对象该怎么比较,有两种比较方式,第一:比较栈中的引用地址是否指向同一个对象,第二:比较堆中的对象内容,可以看String类equals方法重写了Object中的方法,另外也需要注意一点,String是final类型的

public class Test {
	public static void main(String[] args) {
		String s1 = "hello";
		String s2 = "hello";
		// s1,s2引用变量指向相同的内容,故引用地址相同,没有new
		System.out.println(s1.equals(s2));
		System.out.println(s1 == s2);
		// 既然引用地址是一样的,故地址和内容比较都是一样的
		String s3 = new String("hello");
		System.out.println(s1 == s3);
		String s4 = new String("hello");
		System.out.println(s3 == s4);
		// s3,s4指向不用的对象(实例),虽然内容是一样的,故内存地址是不一样的
		System.out.println(s3.equals(s4));
		// String类重写了Object父类的equals方法,通过比较char[]在每一个位置上的值,判断值是否相同
		Test test1 = new Test();
		Test test2 = new Test();
		System.out.println(test1 == test2);
		System.out.println(test1.equals(test2));
		// 没有重写equals方法,调用的还是父类的方法比较的是引用的值
		// String,Date,Integer,Double,这些基本类型的包装类都重写了Object的equals方法
		// StringBuffer及其他的,使用比较方法前先看是否实现了这个方法,如果没有实现,就需要自己来做。
		//打开类快捷键:Ctrl+Shift+T
	}
}

  输出结果:

true
true
false
false
true
false
false

参考:http://www.cnblogs.com/Qian123/p/5704007.html

原文地址:https://www.cnblogs.com/tsxf/p/6477970.html