==和equals的区别:
-
==
: 属于关系(比较)运算符 , 它比较的具体的值。- 针对基本类型:
==
比较的两个值是否相同; - 针对引用类型:
==
比较的两个引用的内存地址(引用)值。
- 针对基本类型:
-
equals
:它本质上属于Object
类中的方法,只是一般所有的子类都会复写equals方法。public boolean equals(Object obj) { return (this == obj); }
在Object类中的equals
依然在使用 ==
比较两个对象是否相同,而在String
中,已经复写Object类中equals
方法,然后根据当前类中的一些属性数据确定两个对象是否相同。
结论:
- 单纯的两个值比较时,可以使用
==
。 - 假如是比较对象中的值时,建议使用
equals
,这样依然是比较两个对象的值的相同。如果使用==
,它比较的就是两个引用的内存地址(引用)值。
private static void demo4() {
String s = "abc";
String s2 = "abc";
// s3和s4它们分别指向堆中不同的String对象
// new的String对象中有引用指向常量池中的"abc"对象
String s3 = new String("abc");
String s4 = new String("abc");
System.out.println(s == s2); // true
System.out.println(s.equals(s2)); // true
System.out.println(s3 == s4); // false
System.out.println(s3.equals(s4)); // true
}