对于JAVA初学者关于==和equals很难去区分,因此在这里做一下总结,以供参考。
- 当比较的类型是基本类型时:
只有==,不存在equals,变量比较的都是值
int x=100;
int y=x;
int z=100;
System.out.println(x==y);//true
System.out.println(x==z);//true
System.out.println(y==z);//true
- 当比较的类型是引用类型时:
==比较的是地址值,equals比较的是对象存储的值
Integer x=100;
Integer y=100;
System.out.println(x.equals(y));//true
System.out.println(x==y);//true
Integer x=1000;
Integer y=1000;
System.out.println(x.equals(y));//true
System.out.println(x==y);//false
这里有同学会提出疑问,为什么第二段代码x==y会是false,那是因为x,y超出了变量范围,在堆内存中重新分配了新的地址值,因此为false。
总结
- 当==比较的地址值相同时,equals比较肯定相同
- 当equals比较值相同时,地址值不一定相同