gpt4 book ai didi

java - Java 中 ArrayList remove() 的不良行为

转载 作者:IT老高 更新时间:2023-10-28 20:56:59 26 4
gpt4 key购买 nike

我有以下两种情况:

1. int 值作为参数

int intNum = 2;
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
list.remove(intNum);
System.out.println(list.size());
// output: 2

<强>2。长值作为参数

long longNum = 2;
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
list.remove(longNum);
System.out.println(list.size());
// output: 3

在这两种情况下,我都将 2 作为值传递,但我得到的列表的大小值不同。这种行为的真正原因是什么?

Properly removing an Integer from a List没有解释关于具有相同值但行为不同的内置数据类型,如上所述

最佳答案

自动装箱

list.remove 方法被重载,两个不同的签名用于不同的目的。一个,list.remove(int),根据其索引删除一个项目,另一个,list.remove(Object),根据对象相等性删除一个项目.您的第一种情况触发第一种类型,而您的第二个示例(使用 long longNum)触发第二种类型,将 long 原语自动装箱为 java.lang .Long 对象。这不等于添加到列表中的 java.lang.Integer(自动装箱)值,因此不会从列表中删除任何内容并且大小将保持不变。

关于java - Java 中 ArrayList remove() 的不良行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30349653/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com