equals和==的区别
- 比较对象时equals和==比较的都是对象的内存地址。
- 在String中equals比较的是对象的内容,而==比较的是内存地址。
public class EqualsTest {
public static void main(String[] args) {
//当对象内存地址不同
Object o1 = new Object();
Object o2 = new Object();
System.out.println(o1 == o2);
System.out.println(o1.equals(o2));
//false
//false
//当对象内存地址相同
o2 = o1;
System.out.println(o1 == o2);
System.out.println(o1.equals(o2));
//true
//true
//String对象内容相同,地址不同
String s1 = new String("123");
String s2 = new String("123");
System.out.println(s1 == s2);
System.out.println(s1.equals(s2));
//false
//true
//String对象地址内容都相同
String s3 = "456";
String s4 = "456";
//常量池中所有相同的常量都会指向同一地址,所以s3和s4的地址是相同的
System.out.println(s3.hashCode() + " " + s4.hashCode());
System.out.println(s3 == s4);
System.out.println(s3.equals(s4));
//51669 51669
//true
//true
}
}