You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 10:36:05