【问题标题】:Integer class in Java [duplicate]Java中的整数类[重复]
【发布时间】:2015-01-12 03:57:40
【问题描述】:

我无法弄清楚为什么输出不同。
输出仅在 -128 到 127 范围内相同。

public class Check {
    public static void main(String[ ] args) {
        Integer i1=122;
        Integer i2=122;

        if(i1==i2)
            System.out.println("Both are same");
        if(i1.equals(i2))
            System.out.println("Both are meaningful same");
    }
}

输出:
两者都一样
两者意义相同

public class Check {
    public static void main(String[] args) {
        Integer i1=1000;
        Integer i2=1000;

        if(i1==i2)
            System.out.println("Both are same");
        if(i1.equals(i2))
            System.out.println("Both are meaningful same");
    }
}

输出: 两者意义相同

【问题讨论】:

  • 总是使用等号。
  • 这个问题有很多重复...一个简单的搜索就可以回答。

标签: java class integer


【解决方案1】:

您在 Java 语言中遇到了一个警告,其中“小”值的自动装箱与自动装箱的规则略有不同。 (在这种情况下,“小”表示 127 到 -128 范围内的数字,如 C 中带符号的byte。)来自JLS 5.1.7 Boxing Conversion

如果被装箱的值 p 是 true、false、一个字节、一个在 \u0000 到 \u007f 范围内的字符,或者一个介于 -128 和 127 之间的 int 或 short 数,那么让 r1 和 r2 是任意的结果p的两次拳击转换。 r1 == r2 总是如此。

(重点是我的。)

在第二个示例中(i1=i2=1000),if(i1==i2) 比较结果为 false,因为两个对象的值都大于 127。在这种情况下,== 是一个引用比较 em>,即检查对象是否实际上是同一个对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-27
    • 2011-03-09
    • 2014-12-06
    • 2023-04-02
    相关资源
    最近更新 更多