Java while循环中的死代码警告,带有2个if';s
我不明白为什么Eclipse会在第二个if条件下给我一个死代码警告:Java while循环中的死代码警告,带有2个if';s,java,dead-code,Java,Dead Code,我不明白为什么Eclipse会在第二个if条件下给我一个死代码警告: boolean frameErreicht = false; while (!frameErreicht) { String line = reader.readLine(); if (line.matches("@\\d*")) { reader.mark(reader.getLineNumber() - 1); reader.setLin
boolean frameErreicht = false;
while (!frameErreicht) {
String line = reader.readLine();
if (line.matches("@\\d*")) {
reader.mark(reader.getLineNumber() - 1);
reader.setLineNumber(reader.getLineNumber() - 1);
frameErreicht = true;
}
if (line == null)
throw new IOException("Keine Angaben zu Frames im Eingabestrom");
}
LinenumberReader的readLine()方法的jdoc表示,如果到达流的末尾,它将返回null
,因此如果在整个文本中都找不到匹配项(line==null
),它应该抛出异常。但有什么问题吗?如果line为null,
line.matches(@\\d*”
会抛出一个NullPointerException它已经死了,因为您之前取消了第4行中指针“line”的引用,这保证了它不是null,否则您将得到NullPointerException。首先:
boolean found = false;
String line = null;
while ((line=reader.readLine())!=null) {
if (line.matches("@\\d*")) {
reader.mark(reader.getLineNumber() - 1);
reader.setLineNumber(reader.getLineNumber() - 1);
found=true;
break;
}
}
if(!found) throw new IOException("Keine Angaben zu Frames im Eingabestrom");
你不是在每一行都做这个检查
此代码不应返回任何死代码…是因为您正在检查line.matches吗?当它到达下一行时不能为null,因为该访问将导致抛出?在调用matches之前,将空检查进一步上移。换句话说,您从未运行过它?为什么在运行前询问?@mellamokbtheWise同样的事情:)如果你认为现有答案是好的,请投票支持它,而不是发布重复的答案。为什么你要删除OP抛出
IOException
?解决方案是只交换if。