==和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 }