当前位置 博文首页 > A_art_xiang的博客:java中==和equals引发的思考
?
==和equals有什么区别?这似乎是一道非常基础的面试题。
众所周知,==是比较地址,equals是比较数值。
那么问题来了。直接上代码
public static void test20(){
Integer a1 = 10;
Integer a2 = 10;
Integer b1 = 1000;
Integer b2 = 1000;
Integer c1 = new Integer(10);
Integer c2 = new Integer(10);
System.out.println(a1 == a2);//true
System.out.println(b1 == b2);//false
System.out.println(c1 == c2);//false
String z1 = "abc";
String z2 = "abc";
String z3 = new String("abc");
String z4 = new String("abc");
System.out.println(z1 == z2);//true
System.out.println(z3 == z4);//false
}
那么问题就很明显了。。。
Integer定义的数值,-127到128的数据,都会放到栈中缓存起来,所以直接定义的Integer数据,在这个范围之内的,都使用的同一个数值。
同理String直接定义的字符串也是放到缓冲区中。
但是new出来的,还是放在堆中的。
cs