@Test
public void test01(){
// ==比较地址,equals比较内容
String s1 ="abc";
String s2 ="abc";
String s3 = s1;
String s4 = new String("abc");
String s5 = new String("abc");
System.out.println("No1:" + (s1 == s2)); // No1:true
System.out.println("No1:" + (s1.equals(s2))); // No1:true
System.out.println("No2:" + (s3 == s1)); // No2:true
System.out.println("No2:" + (s3.equals(s1))); // No2:true
System.out.println("No3:" + (s4 == s5)); // No3:false
System.out.println("No3:" + (s4.equals(s5))); // No3:true
System.out.println("No4:" + (s4 == s1)); // No4:false
System.out.println("No4:" + (s4.equals(s1))); // No4:true
System.out.println("No5:" + (s4 == s3)); // No5:false
System.out.println("No5:" + (s4.equals(s3))); // No5:true
// 注意符号优先级+ > ==,此表达式实际运算是"No6abc" == "abc"
System.out.println("No6:" + s3 == s1); // false
}
总结的来说:
1)对于==,比较的是值是否相等
如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;
如果作用于引用类型的变量,则比较的是所指向的对象的地址
2)对于equals方法,注意:equals方法不能作用于基本数据类型的变量,equals继承Object类,比较的是是否是同一个对象
如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;
诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。
网友评论