声明未初始化的final变量和将final变量设置为null之间的区别是什么?
void A(String pizza) {
String retVal = null;
if (StringUtils.isBlank(pizza)) {
retVal = "blank"
} else {
retVal = computeString(pizza);
}
}
void A(String pizza) {
final String retVal;
if(StringUtils.isBlank(pizza)) {
retVal = "blank"
} else {
retVal = computeString(pizza);
}
}
答案 0 :(得分:2)
也许我不理解,但是在您的第二个示例中,您将无法在retVal
阻止后重新分配if-else
。 A final
variable
只能分配一次。声明变量final可以作为 有用的文档,它的价值不会改变,可以帮助避免 编程错误。
如果您已将final
变量设置为null
,则无法在if
块中重新分配。
答案 1 :(得分:1)
如果您将最终变量设置为null,您将永远无法为其分配任何其他内容...... 最终变量(本身)永远不会改变。
答案 2 :(得分:1)
不同之处在于,永远不能将最终变量更改为具有其他值。
答案 3 :(得分:0)
在这一个中,retVal = null
什么也没做。你给它一个null值。您永远不会拥有使用该值的代码。然后你给它另一个值,这取决于你是使用if-then还是else部分。
在我添加评论的代码中,您可以使用或更改retVal
的值。
void A(String pizza) {
String retVal = null;
... code in here could use it or give it a new value ...
if(StringUtils.isBlank(pizza) {
retVal = "blank"
} else {
retVal = computeString(pizza);
}
... additional code here might change it (and can use it's value) ...
}
在这个中,每次调用方法时都需要给retVal
一个值。你的if-then-else代码可以做到这一点。在给定值之后,永远不能更改该值。
一个区别是编译器会在给它一个值之前告诉你是否使用了retVal
。合理地说,它会告诉你变量还没有值。
void A(String pizza) {
final String retVal;
... code in here cannot use it or give it a value, too ...
if(StringUtils.isBlank(pizza) {
retVal = "blank"
} else {
retVal = computeString(pizza);
}
... additional code here cannot change it but can use it's value ...
}
答案 4 :(得分:0)
final
表示:
含义高度语义,并确保您不会意外忘记关注要分配的内容,并且您可以保证不会意外更改该值。
省略此修饰符只是删除了该保证,没有别的。