use*_*652 0 java integer arraylist wrapper
在Integer Wrapper类中,只要我们比较这样
Integer a=546;
Integer b=546;
System.out.println(a==b);
Run Code Online (Sandbox Code Playgroud)
它返回false,但是当有集合时为什么
ArrayList<Integer> a=new ArrayList<Integer>();
a.add(5);
a.add(546);
Integer g=546;
a.remove(g);
Run Code Online (Sandbox Code Playgroud)
它将它从ArrayList中删除??
因为ArrayList.remove不使用引用标识(这是你得到的==) - 它使用equals.
从文档:
从此列表中删除指定元素的第一个匹配项(如果存在).如果列表不包含该元素,则不会更改.更正式地说,删除具有最低索引的元素
i,使得(o==null ? get(i)==null : o.equals(get(i)))(如果存在这样一个元素).如果此列表包含指定的元素,则返回true(或等效地,如果此列表因调用而更改).
而equals 将返回true:
Integer a = 546;
Integer b = 546;
System.out.println(a.equals(b)); // true
Run Code Online (Sandbox Code Playgroud)
请注意,如果它没有使用equals,那么对于像以下这样的事情来说会很糟糕String:
List<String> list = new ArrayList<>();
list.add("foo");
list.remove(new StringBuilder("f").append("oo").toString()));
System.out.println(list.size()); // 0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
74 次 |
| 最近记录: |