Java 局部变量的初始化
声明未初始化的final变量和将final变量设置为null有什么区别Java 局部变量的初始化,java,Java,声明未初始化的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 re
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);
}
}
也许我不明白,但在第二个示例中,您将无法在
if-else
块之后重新分配retVal
只能分配给一次。声明变量final可以作为
有用的文档,其值不会改变,可以帮助避免
编程错误
如果您已将
final
变量设置为null
,您将无法在If
块中重新分配它。也许我不明白,但在第二个示例中,您将无法在If else
块之后重新分配retVal
只能分配给一次。声明变量final可以作为
有用的文档,其值不会改变,可以帮助避免
编程错误
如果将
final
变量设置为null
,则无法在If
块中重新分配它。如果将final变量设置为null,则无法为其分配任何其他内容。。。
最终变量(自身)永远不会更改。如果将最终变量设置为null,则永远无法为其分配任何其他内容。。。
最终变量(自身)永远不会改变。区别在于最终变量永远不会改变为具有另一个值。区别在于最终变量永远不会改变为具有另一个值。在这个变量中,
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 ...
}
在本例中,
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 ...
}
final
表示:
- 必须分配某些内容(即使为空)
- 之后,您不能将引用更改为任何其他内容(当然,您可以修改 引用的对象)
省略此修饰符只会删除该保证,而不会删除其他内容。
final
表示:
- 必须分配某些内容(即使为空)
- 之后,您不能将引用更改为任何其他内容(当然,您可以修改 引用的对象)
省略此修饰符只会删除该保证,而不会删除任何其他内容。您的意思是在第一个a上有一个
final
吗?您的意思是在第一个a上有一个final
?