您的位置:首页 > 编程语言 > Java开发

《thinking in java》笔记3-equals()和==

2018-01-14 01:05 405 查看
==比较两个对象是否是同一个引用。

equals()比较的是两个对象的值是否相同。

Integer的

package test;
public class EqualsTest {

public static void main(String[] args) {
Integer a = new Integer(10);
Integer b = new Integer(10);

Integer c = 10;
Integer d = 10;

System.out.println("==:"+(a==b));
System.out.println("equals:"+a.equals(b));

System.out.println("==:"+(c==d));
System.out.println("equals:"+c.equals(d));
}

}


运行结果:

==:false
equals:true
==:true
equals:true


相信大家对这个比较迷惑,其实是因为以第二种方式创建的变量引用的是在JVM常量池中已经创建的-128~127共255个整型常量的地址。

新建一个class的情况

package test;

public class EqualsTest {

public static void main(String[] args) {
Value a = new Value();
Value b = new Value();
a.i = 100;
b.i = 100;
System.out.println(a==b);
System.out.println(a.equals(b));
}

}

class Value{
int i;
}


这是因为equals默认的是比较对象的 引用!

public boolean equals(Object obj) {
return (this == obj);
}


这个是Object类下的equals();所以对于大多数的java library class会实现equals()方法使该方法比较的是对象的值而不是对象的引用。

String类型

这个改天再补充!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: