Java 为什么';如果';语句在比较arraylist的两个索引时给出了错误的结果,即使它们具有相同的值

Java 为什么';如果';语句在比较arraylist的两个索引时给出了错误的结果,即使它们具有相同的值,java,arraylist,Java,Arraylist,今天我发现ArrayList有点奇怪。对于以下程序: ArrayList<Integer> al = new ArrayList<Integer>(); al.add(128); al.add(128); int t1 = al.get(0); int t2 = al.get(1); if(al.get(0)== al.get(1)) System.out.print("true"); else

今天我发现ArrayList有点奇怪。对于以下程序:

    ArrayList<Integer> al = new ArrayList<Integer>();
    al.add(128);
    al.add(128);
    int t1 = al.get(0);
    int t2 = al.get(1);
    if(al.get(0)== al.get(1))
      System.out.print("true");
    else
      System.out.print("false");
    if(t1== t2)
      System.out.print("true");
    else
      System.out.print("false");
ArrayList al=new ArrayList();
加(128);
加(128);
int t1=al.get(0);
int t2=al.get(1);
如果(al.get(0)=al.get(1))
系统输出打印(“真”);
其他的
系统输出打印(“假”);
如果(t1==t2)
系统输出打印(“真”);
其他的
系统输出打印(“假”);

它给出的结果是错误的。对于小于128的值,它将给出truetrue。我不明白它背后的逻辑是什么?

Java语言规范说,至少-128到127的包装器对象被缓存和重用。

如果你想了解为什么128不同于较小的数字,请尝试阅读的答案。哦,忘了整数是一个对象,所以不要使用equal