java - 使用 == 运算符的引用比较

标签 java scjp

<分区>

public class AutoBoxingAndUnBoxing 
{
    public static void main(String[] args) 
    {
        Integer x = 127;
        Integer y = 127;
        System.out.println(x == y);//true

        Integer a = 128;
        Integer b = 128;
        System.out.println(a == b);//false
        System.out.println(a); // prints 128
    }
}

为什么 x==y 为真而 a==b 为假?如果它基于值(Integer -128 To 127) 那么'a' 应该打印-128 对吗?

最佳答案

当比较 Integer 对象时,== 运算符可能仅适用于 [-128,127] 之间的数字。看JLS :

If the value p being boxed is true, false, a byte, or a char in the range \u0000 to \u007f, or an int or short number between -128 and 127 (inclusive), then let r1 and r2 be the results of any two boxing conversions of p. It is always the case that r1 == r2.

由于您比较的值不在上述范围内,除非您使用 Integer#equals,否则结果将被评估为 false .

关于java - 使用 == 运算符的引用比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29874838/

相关文章:

Java 字符到字节转换

java - id = 1 - id 是原子的吗?

java - 我应该写 OCJP 16 还是 1.7?

java - 如何调整 GUI 窗口的大小?

java - 在 Intellij 快捷方式中快速翻转 'if-else'

java - Geoserver 生成网络存档文件

java - Play 框架 - 渲染对象列表 - 在 View 中找不到

java - 为什么 String.class == "test".class

java - Java 中的泛型用法是什么? X.<Y>方法()

java - 同一线程上的代码以异常顺序执行