为什么ArrayList的add操作未添加预期元素,反而存入true值?
问题原因
- Java中
ArrayList的add(E e)方法返回值为boolean类型,元素添加成功时会返回true。 - 你代码里
((new ArrayList()).add("Hi"))这部分表达式,实际执行逻辑是先创建新ArrayList对象,调用它的add方法添加"Hi",最终整个表达式的结果是add方法返回的true,而非新建的ArrayList对象。 - 你调用外层
myUnsafeArrayList.add(0, 元素)时,实际传入的第二个参数是布尔值true(自动装箱为Boolean对象),由于你使用的是无泛型限制的原始类型ArrayList,允许存入任意类型对象,所以索引0位置存的就是true,打印自然得到这个结果。
正确写法
你需要先完成新ArrayList对象的创建和元素添加,再把整个对象插入到目标位置:
package dataTypes; import java.util.ArrayList; public class DataTypes { public static void main(String[] args) { ArrayList myUnsafeArrayList = new ArrayList(); myUnsafeArrayList.add("hello"); myUnsafeArrayList.add(100); myUnsafeArrayList.add("end"); System.out.println("Before add: " + myUnsafeArrayList.get(0)); // 先创建新列表并添加元素 ArrayList<String> newList = new ArrayList<>(); newList.add("Hi"); // 再把新列表插入到0号位置 myUnsafeArrayList.add(0, newList); System.out.println("After add: " + myUnsafeArrayList.get(0)); } }
修改后打印0号位置就会得到包含"Hi"的ArrayList对象。
额外建议:日常开发优先使用带泛型限定的ArrayList而非原始类型,能在编译阶段就拦截类型不匹配的错误,避免这类运行时不符合预期的问题。
内容的提问来源于stack exchange,提问作者nicomp
相关产品推荐
相关产品推荐

