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