==具有抽象数据类型,同一种条件的结果不同

1 java memory jvm memory-management shared-memory

可能重复:
整数包装器对象仅在值127内共享相同的实例?

public class test
{
  public static void main(String args[])
  {
    Integer a1=127;
    Integer a2=127;
    System.out.println(a1==a2); //output: true

    Integer b1=128;
    Integer b2=128;
    System.out.println(b1==b2); //output: false

    Long c1=127L;
    Long c2=127L;
    System.out.println(c1==c2); //  output: true

    Long d1=128L;
    Long d2=128L;
    System.out.println(d1==d2); //output: false 
  }
}
Run Code Online (Sandbox Code Playgroud)

输出:

true
false
true
false
Run Code Online (Sandbox Code Playgroud)

您也可以使用negetive值.当您使用值观察输出时,它们的行为会有所不同.这种不同结果的原因是什么?

对于任何数字,范围应为-127到+127,==则为true或为false.

(全部)伙计们抱歉这是一个拼写错误,我把它作为原始错误,但它是抽象的.抱歉这个错误.现在纠正了......

ass*_*ias 9

整数不是原始的,它是一个对象.如果你使用过int或者long你只会得到true.

得到此结果的原因是整数被缓存为介于-128和127之间的值,因此Integer i = 127将始终返回相同的引用.Integer j = 128不一定会这样做.然后,您需要使用它equals来测试底层的相等性int.

这在Java语言规范#5.1.7中定义.

请注意,该范围之外的值的行为[-128; 127]未定义:

例如,较少内存限制的实现可以缓存所有char和short值,以及-32K到+ 32K范围内的int和long值.