java中== 和 equals 区别是什么?
==如果是基本类型是比较值,如果是引用类型则是比较内存地址
equals比较的是引用参数的值
例1
// -128 ~ +127 之间
Integer a = 5;
int b = 5;
Integer c = new Integer(5);
Integer d = 5;
System.out.println(a.equals(b)); //true
System.out.println(a == b); //true
System.out.println(a.equals(c)); //true
System.out.println(a == c); //false
System.out.println(a == d); //true
System.out.println("a对象映射的内存地址" + System.identityHashCode(a));// 366712642
System.out.println("b对象映射的内存地址" + System.identityHashCode(b));// 366712642
System.out.println("c对象映射的内存地址" + System.identityHashCode(c));// 1829164700
System.out.println("d对象映射的内存地址" + System.identityHashCode(d));// 366712642
例2
// -128 ~ +127 之外
Integer a = 128;
int b = 129;
Integer c = new Integer(128);
Integer d = 128;
System.out.println(a.equals(b)); //false
System.out.println(a == b); //false
System.out.println(a.equals(c)); //true
System.out.println(a == c); //false
System.out.println(a == d); //false
System.out.println("a对象映射的内存地址" + System.identityHashCode(a));// 531885035
System.out.println("b对象映射的内存地址" + System.identityHashCode(b));// 1418481495
System.out.println("c对象映射的内存地址" + System.identityHashCode(c));// 303563356
System.out.println("d对象映射的内存地址" + System.identityHashCode(d));// 135721597
通过以上例子可以看出-128 ~ +127 之间和-128 ~ +127 之外的区别则是内存地址的不同
-128 ~ +127 之间是JVM中栈中已存在的值
-128 ~ +127 之外则是堆中新开辟的内存地址

浙公网安备 33010602011771号