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

简介: public static void main(String[] a) { test1(); } static void test1() { // Integer的自动拆装箱的陷阱(整型数-128到127的值比较问题) out.
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

相关文章
|
存储 IDE 编译器
整型在内存中的存储及运算规则
整型在内存中的存储及运算规则
|
3月前
运算符有哪些?优先级是怎么样的?转换数据类型的方法?(最少4种)
运算符有哪些?优先级是怎么样的?转换数据类型的方法?(最少4种)
25 0
|
6月前
求两个整数的较大值
两幅图片展示,无文字描述。第一张图链接源为:[结果](https://so.csdn.net/so/search?q=%E7%BB%93%E6%9E%9C&spm=1001.2101.3001.7020)。
35 1
求两个整数的较大值
|
5月前
|
C#
C#数值类型介绍及示例
C#数值类型介绍及示例
|
6月前
|
存储 人工智能 程序员
溢出、截断、类型提升:从易错代码入手分析整型数据存储与类型转换
这篇文章介绍了关于数据在内存中的存储以及可能出现的溢出问题,包括整型数据的存储方式、取值范围以及溢出的现象和原因。文章通过例子和罗盘图解释了整型数据溢出时的计算过程,并指出在进行运算时要注意数据类型的转换和可能的溢出情况。此外,文章还给出了几个练习题,帮助读者理解和应用这些知识。
181 0
|
6月前
|
Java
BigDecimal类型的数据范围判断与加减乘除操作
BigDecimal类型的数据范围判断与加减乘除操作
126 0
|
6月前
|
存储 C语言
学习总结(位操作符;循环输入的三种方式;交换两个变量值的三种方法;打印数字对应的二进制;unsigned int 与int 的区别;改变特定位数0/1;&&和||的连续操作(与前置,后置结合))
学习总结(位操作符;循环输入的三种方式;交换两个变量值的三种方法;打印数字对应的二进制;unsigned int 与int 的区别;改变特定位数0/1;&&和||的连续操作(与前置,后置结合))
66 0
|
SQL
解决SQLServerException: 转换 varchar 值 '12345678901' 时溢出了整数列的bug
解决SQLServerException: 转换 varchar 值 '12345678901' 时溢出了整数列的bug
325 0
wustojc1003设计函数求2个整数的最大值
wustojc1003设计函数求2个整数的最大值
49 0
|
存储 算法 JavaScript
设计并实现一个函数, 功能为给定一个存储为随机整数的数组,从中删除所有值为i的整数
设计并实现一个函数, 功能为给定一个存储为随机整数的数组,从中删除所有值为i的整数
下一篇
无影云桌面