1 . ==
int n = 3;
int m = 3;
System.out.println(n == m);
String str = new String("hello");
String str1 = new String("hello");
String str2 = new String("hello");
System.out.println(str1 == str2);
str1 = str;
str2 = str;
System.out.println(str1 == str2);
输出结果 : true false true
对于八大基本类型==比较的是值所以n==m为true
对于引用类型String等比较的是对象在内存中的存储地址,所以str1 == str2为false
最后一个为true,是因为str1和str2都指向了str指向的对象
2 . equals
equals方法是基类Object中的方法,因此对于所有的继承于Object的类都会有该方法。
下面是Object类中equals方法的实现:
在Object类中,equals方法是用来比较两个对象的引用是否相等,即是否指向同一个对象。
String str1 = new String("hello");
String str2 = new String("hello");
System.out.println(str1.equals(str2));
返回true
Why?
下面是String类中equals方法的具体实现:
可以看出,String类对equals方法进行了重写,用来比较指向的字符串对象所存储的字符串是否相等。
其他的一些类诸如Double,Date,Integer等,都对equals方法进行了重写用来比较指向的对象所存储的内容是否相等。
总结来说:
1.对于==,如果作用于基本数据类型,则比较存储的值是否相等;如果作用于引用类型的变量,则比较的是所指向的对象的地址;
2.对于equals方法,注意:equals方法不能作用于基本数据类型的变量
如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;
诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。