Java 使用==运算符进行引用比较

Java 使用==运算符进行引用比较,java,scjp,Java,Scjp,为什么x==y是真的而a==b是假的?如果它基于值(Integer-128到127),那么'a'应该打印-128对吗?在比较Integer对象时,=操作符可能只对[-128127]之间的数字有效。看看下面的例子: 如果要装箱的值p为true、false、字节或 范围从\u0000到\u007f,或介于-128和127之间的整数或短数 (包括),然后让r1和r2为任意两个装箱的结果 p。r1==r2总是这样 由于您要比较的值不在上述范围内,除非您使用,否则结果将被评估为false。好,但如果范围为

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

在比较
Integer
对象时,
=
操作符可能只对[-128127]之间的数字有效。看看下面的例子:

如果要装箱的值p为true、false、字节或 范围从\u0000到\u007f,或介于-128和127之间的整数或短数 (包括),然后让r1和r2为任意两个装箱的结果 p。r1==r2总是这样


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

好,但如果范围为-128到127,127后面的值是什么?@kittu“值”是什么意思?这些值是由于性能问题而缓存的,超出该范围的值应该使用
equals
进行比较。我的意思是
a==b
在我的情况下如何为false?内部发生了什么使其成为错误/@基图因为
a
b
不是原语,它们是对象。比较对象时应使用
equals
,它适用于127,因为值是缓存的,
=
可以(并非总是)处理它。Integer的范围是-2^31到2^31-1。不是-128比127;这是
字节的范围。
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
    }
}