`
aijuans
  • 浏览: 1566254 次
社区版块
存档分类
最新评论

Integer和int使用解惑

 
阅读更多

前几天群里,大家对Integer和int的区别,讨论的火热,最后以吵闹结束!

先举一个例子:

运行结果:

false

true

true

false

false


从常理解释(其实是错误的解释):

in1>=in2 和 in1<=in2 同时成立true,则in1==in2 也应该返回true,但是in1==in2返回false,这是争论的起点。


正确的解释:

in1==in2 比较对象地址和对象的值, in1>=in2 和 in1<=in2 编译时,自动调用了Integer.intValue(int i); 因此,它们其实比较的是基本数据类型int的值,因此很容易理解, in1>in2 和 in1<in2 都返回false。

下面是反编译后的JVM指令作为实证:

JVM指令


分享到:
评论

相关推荐

    JAVA面试题解惑系列合集

    《JAVA面试题解惑系列合集》这篇文章详细...它们在代码中的使用频率非常高,需要熟练掌握它们的使用和优先级。 这些知识点在Java开发和面试中是非常常见的,掌握这些内容对于通过Java相关的面试以及开发工作非常重要。

    《Java解惑》

    《Java解惑》一书揭示了Java编程中常见的困惑与陷阱,旨在帮助开发者避免这些问题,提高代码质量和效率。以下是对书中的几个关键知识点的详细解释: 1. **奇偶判断优化**: 在Java中,判断一个整数是否为奇数,...

    java解惑-语法细节介绍

    Integer intObj = 100; Long longObj = Long.valueOf(intObj.toString()); ``` 4. **对象转型**:对象转型主要用于继承关系中的子类向父类或父类向子类的转换。需要注意的是,向上转型是自动的,而向下转型则...

    java解惑(java谜题)中文版的

    1. **类型转换**:Java中的自动装箱和拆箱可能导致一些陷阱,比如Integer对象与int基本类型的比较。在处理数值时,不恰当的类型转换可能导致逻辑错误。 2. **变量作用域**:Java的局部变量、成员变量和静态变量的...

    [C语言解惑].Alan.R.Feuer.扫描版.pdf

    例如,可以使用typedef声明新的类型名称,如typedef int Integer。 C++具有丰富的操作符,包括算术操作符(如+、-、*、/、%)、关系操作符(如==、!=、&gt;、&lt;、&gt;=、)、逻辑操作符(如&&、||、!)、位操作符(如&、|...

    Java面试题及解惑

    - **数值型字符转换为数字**:可以使用`Integer.parseInt()`或`Double.parseDouble()`等方法。 - **数字转换为字符**:可以通过`Character`类的方法或者字符串拼接实现。 - **取小数点前两位并四舍五入**:使用`Math...

    Java puzzlers(java 解惑)附源码

    书中的puzzlers将揭示这些陷阱,源码分析则能帮助我们理解如何有效地使用和优化集合操作。 此外,还有关于方法重载和覆盖、访问控制、默认构造函数等方面的puzzlers。通过源码,我们可以深入理解Java的OOP特性,...

    DSP开发核心教程:破解数字信号处理的密码!

    - **答疑解惑**:建立在线交流平台,让学员可以直接向专家提问,获取及时反馈和建议。 ### 小结 本教程旨在为DSP初学者和有一定经验的开发者提供全面的学习资源,覆盖从基础知识到高级应用的所有方面。通过理论...

    java puzzler code

    例如,`if (true) { int x = 10; } System.out.println(x);` 在这段代码中,`x`在if语句块外部是不可见的,因此会引发编译错误。 3. **字符串操作:** - 字符串是不可变的,所以`str += "foo"`实际上是创建了一个...

Global site tag (gtag.js) - Google Analytics