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