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

Java代码中字符串数组赋值失效问题及解决方案咨询

问题分析与解决办法

这个问题我之前也碰到过,核心问题出在你对数组引用的处理上,咱们一步步拆解:

为什么会出现这个问题?

  1. 空指针问题:第一次循环结束后,你把answers和explanations设为null,下次循环进入for (int i = 0; i < 4; i++)尝试给answers[i]赋值时,因为answers已经是null,直接会抛出NullPointerException,自然没法修改数组。
  2. 引用共享的隐藏坑:就算你不把数组设为null,因为数组是引用类型,你每次添加到questions列表里的都是同一个数组的引用。后续循环修改数组内容时,之前添加的Question对象里的数组值也会被覆盖,这会导致所有Question的答案和解释最后都变成最后一次循环的内容。

解决办法

每次循环开始前重新创建新的数组对象,而不是复用同一个数组引用。这样每次循环处理的都是独立的数组,既不会出现空指针,也不会互相干扰。

修改后的代码如下:

while (in.hasNextLine()) {
    String question = in.nextLine();
    // 每次循环都新建数组,保证每个Question对应独立的数组
    String[] answers = new String[4];
    for (int i = 0; i < 4; i++) {
        answers[i] = in.nextLine();
    }
    String[] explanations = new String[4];
    for (int k = 0; k < 4; k++) {
        explanations[k] = in.nextLine();
    }
    // 循环结束后直接添加,不需要把数组设为null
    questions.add(new Question(question, answers, explanations));
}

这样修改后:

  • 每次循环都会创建新的answers和explanations数组,避免了引用共享的问题;
  • 不需要再把数组设为null,自然也就不会出现后续循环无法修改数组的情况;
  • 每个Question对象都会持有独立的数组副本,数据不会互相覆盖。

内容的提问来源于stack exchange,提问作者Johnny Dinh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:26:55