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出来的,还是放在堆中的。

猜你喜欢

转载自blog.csdn.net/A_art_xiang/article/details/115179771