String s = "";
for(i=0;i<....){
s = some Assignment;
}
Run Code Online (Sandbox Code Playgroud)
要么
for(i=0;i<..){
String s = some Assignment;
}
Run Code Online (Sandbox Code Playgroud)
我不需要再次在循环外使用's'了.第一个选项可能更好,因为每次都不会初始化新的String.然而,第二个将导致变量的范围限于循环本身.
编辑:回应Milhous的回答.将String分配给循环中的常量是没有意义的吗?不,这里'一些分配'意味着从迭代的列表中获得的变化值.
此外,问题不是因为我担心内存管理.只是想知道哪个更好.
我正在使用Eclipse PMD Plug-in (4.0.0.v20130510-1000)并且获得了很多违规行为:
Found 'DD'-anomaly for variable 'freq' (lines '187'-'189').
Found 'DU'-anomaly for variable 'freq' (lines '189'-'333').
在这个 SO答案中,它说这些异常与分配从未读过的值有关.但是我在这种情况下得到了违规行为:
// here I get a DD anomaly
double freq = 0;
try {
// here I get a DU anomaly
freq = Double.parseDouble(getFrequencyTextField().getText());
} catch (final NumberFormatException e) {
Log.e(e.getMessage());
}
if (freq < 10E6) doSomething();
Run Code Online (Sandbox Code Playgroud)
如果我删除初始化并freq = 0;在catch块中添加一行,则DD异常消失,但我在两个分配上都得到DU异常.
现在我的问题是:我该如何应对?什么是PMD的首选解决方案?这个规则究竟试图阻止什么(即为什么这是不好的做法)?