Java代码中字符串数组赋值失效问题及解决方案咨询
问题分析与解决办法
这个问题我之前也碰到过,核心问题出在你对数组引用的处理上,咱们一步步拆解:
为什么会出现这个问题?
- 空指针问题:第一次循环结束后,你把
answers和explanations设为null,下次循环进入for (int i = 0; i < 4; i++)尝试给answers[i]赋值时,因为answers已经是null,直接会抛出NullPointerException,自然没法修改数组。 - 引用共享的隐藏坑:就算你不把数组设为
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
相关产品推荐
相关产品推荐

