Integer的自动拆装箱的陷阱(整型数-128到127的值比较问题)

public static void main(String[] a) {
        test1();        
    }

    static void test1() {
        // Integer的自动拆装箱的陷阱(整型数-128到127的值比较问题)
        out.println("-------------------");
        Integer x = new Integer(123);
        Integer y = new Integer(123);
        out.println(x == y);
        out.println(x.equals(y));

        out.println("-------------------");
        Integer z = Integer.valueOf(123);
        Integer w = Integer.valueOf(123);
        out.println(z == w);
        out.println(z.equals(w));

        out.println("-------------------");
        Long a = Long.valueOf(127);
        Long b = Long.valueOf(127);
        out.println(a == b);
        out.println(a.equals(b));

        out.println("-------------------");
        Long c = Long.valueOf(128);
        Long d = Long.valueOf(128);
        System.out.println(c == d);
        System.out.println(c.equals(d));
    }

输出:

-------------------
false
true
-------------------
true
true
-------------------
true
true
-------------------
false
true

Java里面对处在在-128127之间的Integer值,用的是原生数据类型int,会在内存里供重用,也就是说这之间的Integer值进行==比较时只是进行int原生数据类型的数值比较,而超出-128127的范围,进行==比较时是进行地址及数值比较。

在Kotlin中,写代码的时候不再有 int, long 等基本类型,Kotlin中统一都是引用类型。

源代码工程:https://github.com/EasyKotlin/kotlin_tutorials

    原文作者:一个会写诗的程序员
    原文地址: https://www.jianshu.com/p/93883dfc772e
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞