如何';如果';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)))