如何';如果';Java作品中的语法? List stack1=new ArrayList(); List stack2=新的ArrayList(); //一些加法运算 ...... //一些加法运算 if(stack1.remove(index1)=stack2.get(index2-1)) 堆栈2.移除(--index2);

如何';如果';Java作品中的语法? List stack1=new ArrayList(); List stack2=新的ArrayList(); //一些加法运算 ...... //一些加法运算 if(stack1.remove(index1)=stack2.get(index2-1)) 堆栈2.移除(--index2);,java,Java,上面的代码是错误的。 而下面的代码工作正常 List<Integer> stack1 = new ArrayList<>(); List<Integer> stack2 = new ArrayList<>(); //some add operation ...... //some add operation if(stack1.remove(index1) == stack2.get(index2-1)) stack2.remove(--i

上面的代码是错误的。 而下面的代码工作正常

List<Integer> stack1 = new ArrayList<>();
List<Integer> stack2 = new ArrayList<>();

//some add operation
......
//some add operation

if(stack1.remove(index1) == stack2.get(index2-1))
  stack2.remove(--index2);
List stack1=new ArrayList();
List stack2=新的ArrayList();
//一些加法运算
......
//一些加法运算
int i=堆栈1.移除(index1);
int j=stack2.get(index2-1);
如果(i==j)
堆栈2.移除(--index2);

前一个代码的工作原理是,即使后一个代码中的“if”语句判断为true,它也判断为false,这让我感到困惑。

堆栈元素是
整数
对象。在第一种情况下比较它们的标识,在第二种情况下比较值

试试这个

List<Integer> stack1 = new ArrayList<>();
List<Integer> stack2 = new ArrayList<>();

//some add operation
......
//some add operation

int i = stack1.remove(index1);
int j = stack2.get(index2-1);

if(i == j)
  stack2.remove(--index2);

在Java中,对象引用上的==比较器不测试对象的值是否相等。它测试引用是否引用同一对象。在第一种情况下,您要检查stack1的整数引用和stack2的整数引用是否都引用同一个整数对象

要测试对象的值等价性,通常使用object.equals(otherObject)方法

在第二种情况下,Java做了一件被称为自动装箱的鬼鬼祟祟的事情,它将一个对象转换为它的基本类型,即从Integer转换为int。基本类型上的==比较就是您所期望的


请参阅有关自动装箱的更多信息。

在第一种情况下,对两个整数对象使用“==”运算符。仅当两个对象引用指向同一对象(同一内存位置)时,该检查才会计算为“true”。在第二种情况下,对两个基本整数使用“==”运算符。如果原语的值相同,即使它们位于不同的内存位置,该检查的结果也为true。

您确定在这两种情况下都执行了完全相同的操作(您没有显示)
语句
判断
。。。我建议阅读《Oracle Java指南》。它相当全面,可以解释你需要的一切。我的错。我查看了另一个删除方法。视差误差。谢谢你指出这一点。
if(stack1.remove(index1).equals(stack2.get(index2-1)))