java中的ArrayList错误(无法等于两个数字)
这里有一些代码java中的ArrayList错误(无法等于两个数字),java,if-statement,arraylist,Java,If Statement,Arraylist,这里有一些代码 package deleteit; import java.lang.*; import java.io.*; import java.util.*; public class Deleteit { public static void main(String[] args) throws IOException { BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
package deleteit;
import java.lang.*;
import java.io.*;
import java.util.*;
public class Deleteit {
public static void main(String[] args) throws IOException {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
ArrayList<Integer> arr1=new ArrayList<Integer>();
arr1.add(100000);
arr1.add(1);
arr1.add(100000);
arr1.remove(1);
if(arr1.get(0)==arr1.get(1))
{
System.out.println("GUd");
}
else
System.out.println("damnit");
}
}
包删除它;
导入java.lang.*;
导入java.io.*;
导入java.util.*;
公共类删除它{
公共静态void main(字符串[]args)引发IOException{
BufferedReader br=新的BufferedReader(新的InputStreamReader(System.in));
ArrayList arr1=新的ArrayList();
1.增加(100000);
1.加入第(1)款;
1.增加(100000);
arr1.移除(1);
如果(arr1.get(0)=arr1.get(1))
{
System.out.println(“GUd”);
}
其他的
System.out.println(“该死的”);
}
}
现在Gud应该被打印出来,因为100000等于100000,因为1从ArrayList中被删除,所以剩下100000和100000。
那么为什么会打印damnit?
这是一个BUG吗?您必须使用
equals
而不是=
以下是一些示例代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class DeleteIt {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
ArrayList<Integer> arr1 = new ArrayList<Integer>();
arr1.add(100000);
arr1.add(1);
arr1.add(100000);
arr1.remove(1);
if (arr1.get(0).equals(arr1.get(1))) {
System.out.println("GUd");
} else
System.out.println("damnit");
}
}
后一个代码似乎强制取消装箱,然后
==
不是比较引用,而是比较实际值。您必须使用等于而不是=
以下是一些示例代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class DeleteIt {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
ArrayList<Integer> arr1 = new ArrayList<Integer>();
arr1.add(100000);
arr1.add(1);
arr1.add(100000);
arr1.remove(1);
if (arr1.get(0).equals(arr1.get(1))) {
System.out.println("GUd");
} else
System.out.println("damnit");
}
}
后一个代码似乎强制取消装箱,然后==
不是比较引用,而是比较实际值。使用if(arr1.get(0).equals(arr1.get(1))
,因为==
而不是.equals()
。也不是说arr1.remove(1)
很棘手-它会删除索引1
中的项目还是等于(1)
的项目?为什么会这样?有什么原因吗?我总是使用arr1.get(0)==arr1.get(1)它删除索引1U中的项目,我们可以使用Netbeans调试它,等等,因为if(arr1.get(0).equals(arr1.get(1))
,因为==
而不是.equals()
。也不是说arr1.remove(1)
很棘手-它会删除索引1
中的项目还是等于(1)
的项目?为什么会这样?有什么原因吗?我总是使用arr1.get(0)==arr1.get(1)它会删除索引1U处的项目,可以使用Netbeans进行调试,ETCPL解释为什么取消装箱
不在这里工作???@shubhandupamanik请检查我的更新答案。我不能100%确定为什么取消装箱在这里不起作用,但是通过在比较的第一个值上使用intValue()
,您可以“触发”它。请解释为什么unboxing
在这里不起作用???@shubhandupamanik请检查我的更新答案。我不能100%确定为什么取消装箱在这里不起作用,但是通过对比较的第一个值使用intValue()
,您可以“触发”它。