java指令分配一个值,但该值不会在任何后续指令中读取或使用
我有一段代码
for(int i = 0; i < num_of_random; i++){
String str = in.readLine();
if(str != null){
String[] randoms = new String[4];
randoms = str.split(",");
dateRanges[i] = Integer.parseInt(randoms[0]);
id[i] = Integer.parseInt(randoms[1]);
flag[i] = Integer.parseInt(randoms[2]);
system[i] = Integer.parseInt(randoms[3]);
}
}
当我在findBugs上运行这段代码时,我得到了一个关于
“String[]randoms=新字符串[4];”
此指令为局部变量赋值,但该值不会在任何后续指令中读取或使用。通常,这表明存在错误,因为从未使用计算出的值
为什么我会得到这个
非常感谢
# 1 楼答案
这是我称之为“我是哑巴”技术的一个例子
通常,这是程序员编写代码,但不理解他们在做什么的结果。在某个时刻,程序员读到或听到这样的话:“必须初始化所有局部变量!”。当他们编写代码时
String[] randoms
突然出现在他们的脑海中,于是他们添加了= new String[4]
一个经验丰富的程序员可能会看到这一点,觉得我以前很笨,但现在不是了!让我们将变量声明移出循环,并生成如下内容:
# 2 楼答案
直接尝试:
你不需要实例化一个
String[]
,split
方法已经完成了# 3 楼答案
因为您将一个变量初始化为一个值(
new String[4]
),然后用另一个值替换变量值(紧接着是str.split(",")
的结果)。因此,不需要初始化你的代码在功能上等同于
除了分配一个新的字符串数组,该数组会立即被丢弃
# 4 楼答案
因为你可以这么做: