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

KotinChina编程社区 · · 81 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。
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

本文来自:简书

感谢作者:KotinChina编程社区

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

81 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet