【问题标题】:What's wrong with Integer, Java? [duplicate]整数,Java有什么问题? [复制]
【发布时间】:2013-08-29 20:18:25
【问题描述】:
    public class Test {
    public static void main(String[] args) {
        Integer i=555,j=555;
        System.out.println(i==j); //false
        Integer l=5,n=5;
        System.out.println(l==n); //true
    }
}

为什么,Java?这怎么可能?

【问题讨论】:

  • stackoverflow.com/questions/8427416/… - 重复,除非反过来。
  • 同样的原因,您几乎总是从不比较 Strings==
  • @DennisMeng 不止于此。
  • @arshajii 我可能过于简单化了,但理解一个将有助于理解另一个。
  • 正如其他人所说,您是在比较对象,并且您需要了解 Java 的整数内部原理。

标签: java integer


【解决方案1】:

您正在比较具有相同值的两个不同 Integer 类实例的引用,因此您必须使用 equals 方法(因为它必须用于比较对象之间的相等性):

Integer i=555,j=555;
System.out.println(i==j); //false
Integer i=555,j=555;
System.out.println(i.equals(j)); //true

但是Integer 有一个Integer 对象实例池,int 的值介于 -128 和 127 之间。所以当你这样做时

Integer l=5,n=5;
System.out.println(l==n); //true

您收到true,因为ln指向同一个对象引用。

【讨论】:

    猜你喜欢
    • 2021-10-06
    • 2020-08-01
    • 2016-08-03
    • 2012-07-16
    • 2014-02-10
    • 2019-04-11
    • 2016-04-15
    • 2016-03-20
    • 2020-06-17
    相关资源
    最近更新 更多