首先,在Object中,==和equals没有区别。
举例:
/** * Students类(Object) * * @author zhdzb * */ class Students { String name; int age; char sex; public Students(String name, int age, char sex) { super(); this.name = name; this.age = age; this.sex = sex; } } public class Test { public static void main(String[] args) { // s1和s2是两个不同的对象 Students s1 = new Students("张三", 20, ‘男‘); Students s2 = new Students("张三", 20, ‘男‘); boolean b1 = s1 == s2; boolean b2 = s1.equals(s2); System.out.println("s1 == s2:" + b1); System.out.println("s1.equals(s2):" + b2); } }
内存图如下:
执行结果:
即在不重写equals()方法的情况下,两种比较方式相同。
在String中,equals()得到了重写,当使用==时,依旧比较两个值的地址是否相同,但是使用equals()方法则是一次比较String中的每个char是否相同。
举例:
public class Test { public static void main(String[] args) { // s1和s2是两个不同的对象,但是內容一样 String s1 = new String("Hello"); String s2 = new String("Hello"); boolean b1 = s1 == s2; boolean b2 = s1.equals(s2); System.out.println("s1 == s2:" + b1); System.out.println("s1.equals(s2):" + b2); } }
内存图:
执行结果: