“==”与 equals的区别
在java中," == " 作为关系运算符,对于基本数据类型而言,"=="比较的是值的大小;对于引用数据类型而言,比较的则是内存中的地址,即是否为同一对象的引用。
equals用于比较引用数据类型的具体内容是否相同,它不适用于基本数据类型的比较。
“==”在基本数据类型与封装类型的不同表现
int a = 10;
int b = 10;
System.out.println(a == b);
对于这个判断,我们立马就知道为true。因为对于基本数据类型,==比较的是值的大小。那如果是用int的封装类型Integer呢?
Integer a= 10;
Integer b = 10;
System.out.println(a == b);
通过编译运行,答案也为true
那如果这样呢?
Integer a = 200;
Integer b = 200;
System.out.println(a == b);
惊奇地发现结果为 false。
为什么改变了值结果就变了呢?原因是为了节省内存即访问速度,java将Integer类型范围在1个字节(-128~127)fa范围内的值存放在了常量池中已方便访问,所以前面的10因为在常量池范围内,所以它们对应的是同一个对象,因此为true,而后面的200不在常量池范围内,因此为false。
“==”跟equals在引用类型中的表现
还是拿Integer来作为例子:
Integer a = new Integer(10);
Integer b = new Integer(10);
System.out.println(a == b);
System.out.println(a.equals(b));
结果为 false ,true.
可以看到,这里用了new关键字,结果就全然不同了。因为a、b在这里表现为引用类型,==对于引用类型而言比较的是内存中的地址,因此为false;equals比较的内容是否相同,因此为true。