首先==比较的是内存地址是否相等。(特指对象类型,如果是基本类型,则比较的是值是否相等)
equals是Object的方法,本身比较的也是内存地址是否相等。
而重写之后的equals方法常用于比较值是否相等。
举个例子
Integer比较时,应该用equals来比较,而不是==
Integer此时比较的是内存地址,发现不等,用equals比较的值相等
但为什么Integer的值是127时,用==比较相等呢?
原因在于Iava中的包装类有缓存机制,在[-128,127]之间呢,就从IntegerCache中获取。
Integer a = 127;
Integer b = 127;
System.out.println("(a==b) = " + (a == b));// true
System.out.println("a.equals(b) = " + a.equals(b));// true
Integer a = 1000;
Integer b = 1000;
System.out.println("(a==b) = " + (a == b));// false
System.out.println("a.equals(b) = " + a.equals(b));// true
再来举一个例子
基本类型则比较的是值是否相等
int c = 130;
int d = 130;
System.out.println("(c==d) = " + (c == d));// true

被折叠的 条评论
为什么被折叠?



