当前位置 博文首页 > A_art_xiang的博客:java中==和equals引发的思考

    A_art_xiang的博客:java中==和equals引发的思考

    作者:[db:作者] 时间:2021-07-14 09:57

    ?

    写在前面

    ==和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
    下一篇:没有了