我正在阅读网上发现的一些代码,并在这些行上(java):
private List values;
[...]
for (final String str : values) {
length += context.strlen(str);
}
在for循环中声明变量final有什么好处?我认为for循环中指定的变量已经是只读的(例如,在上面的例子中不能为’str’赋值).
谢谢
解决方法:
What is the advantage of declaring a variable final in a for loop ?
在一小段代码中并不多,但是,如果它有助于避免在循环时更改引用.
例如:
for( String s : values ) {
computeSomething( s );
... a dozen of lines here...
s = s.trim();// or worst s = getOtherString();
... another dozen of line
otherComputation( s );
}
如果不使用final,则最后一行anotherComputation可能使用与迭代中定义的值不同的值,并且可能会引入细微的错误,而在阅读其他代码时,维护者将尝试弄清楚该方法如何失败用正确的值.
对于5到15行的长度来说这很容易被发现,但对于更大的代码段,相信我,要困难得多.
使用final将阻止编译时的值更改.
...
for( final String s : values ) {
s = new StringBuilder( s ).reverse().toString();
}
此代码在编译时失败,可能已经分配了变量s
另一个优点是允许变量在匿名内部类中使用:
for( final String s : value ) {
doSomething( new InnerClass() {
void something() {
s.length();// accesing s from within the inner class
}
});
}
标签:java
来源: https://codeday.me/bug/20190726/1545696.html