Java新手,对不起,如果这是一个愚蠢的问题。我想为while
循环内的几个变量分配新值,但这不起作用。我收到错误"本地变量newString
可能尚未初始化"在尝试编译时。这是一个例子:
public class Test {
public static String example() {
String first;
String second;
String newString;
int start = 1;
while (start<5) {
if (start<4) {
first = "hello";
second = "world";
newString = first + second;
}
start += 1;
}
return newString;
}
public static void main(String[] args) {
System.out.println(example());
}
}
答案 0 :(得分:1)
您收到此错误是因为编译器在返回之前不知道是否会初始化newString
。
虽然 你 知道start<5
和start<4
都是true
并且因此会执行,但编译器并没有&# 39;在编译期间执行这些类型的计算。因此,就其所知,这些语句永远不会执行,因此newString
可能会在初始化之前返回。
因此,您应该在声明它时将其初始化(例如null
)以避免此错误。
答案 1 :(得分:1)
Java中有一条规则,所有局部变量必须在首次读取之前进行初始化。您正在使用newString
作为返回值,这是一个读取操作。
虽然您要为newString
分配值,但它是在条件情况下完成的(start<5 && start<4
)。在编译时,编译器不知道运行代码的结果是什么,它保守地抱怨这种情况。
简单的解决方案是初始化字符串:
String newString = "";
答案 2 :(得分:1)
当您从方法返回变量时,编译器需要确保将一个值分配给该变量(在您的情况下为newString
)。
虽然你很清楚条件start < 4
在某些点上会true
,但是编译器不够聪明,无法解决这个问题,这意味着你必须只返回变量,肯定有价值。
根据您的方法的目的,您有以下机会:
String newString = "";
在这种情况下,您确定您的方法永远不会返回null
,这在某些情况下可能会发现错误。
另一个机会是
String newString = null;
如果您希望允许方法返回null
值。
在这种情况下很明显,你最终会输入if
- 块并为变量newString
分配一个值,在其他情况下它不会那么明显,所以你需要确定是否允许您的方法返回null
值。