【发布时间】:2012-12-15 17:37:59
【问题描述】:
我有以下代码...
import java.util.Random;
public class ThreeArgumentOperator {
private static final Random RANDOM = new Random();
public static void main(String[] args) {
String test;
System.out.println(test = getValue() == null ? "" : test);
}
public static String getValue() {
if (RANDOM.nextBoolean()) {
return "";
} else {
return null;
}
}
}
Eclipse编译器(我用的是Juno)报如下错误:
可能没有初始化局部变量test
我的问题是:在这种情况下编译器是否应该报告它不能将boolean 转换为String?我知道运算符== 优先于=,因此编译器应该抱怨转换,而不是抱怨可能没有初始化值。
当我更改以下行时
System.out.println(test = getValue() == null ? "" : test);
到
System.out.println((test = getValue()) == null ? "" : test);
一切正常。
编辑:我也尝试直接使用javac 编译它。它给出了同样的错误。
error: variable test might not have been initialized
System.out.println(test = getValue() == null ? "" : test);
【问题讨论】:
-
应该,在我的情况下确实如此。
-
@NPE 是不是意味着你得到了
Type mismatch: cannot convert from boolean to String?如果是这样,您使用什么编译器? -
我现在已经在我的 Eclipse 中测试了这个,编译器给了我你描述的错误。顺便说一句,我使用的是 Sun 的 JDK 7。
-
请不要这样做,这很容易出错。
-
@RC 它是否容易出错并不重要。这是因为编译器在这种情况下给出了误导性的信息。