3

我有以下代码

public class Test {
  public static void main(String[] args) {
    Integer i1=null;

    String s1=null;
    String s2=String.valueOf(i1);
    System.out.println(s1==null+" "+s2==null);//Compilation Error
    System.out.println(s1==null+" ");//No compilation Error
    System.out.println(s2==null+" ");//No compilation error
  }
}

如果将两个布尔值与字符串结合起来,为什么会出现编译错误

编辑:编译错误是运算符 == 未定义参数类型布尔值,null

4

2 回答 2

6

这是一个优先级的问题。我永远记不起所有的优先规则(我不尝试),但我怀疑编译器试图将其解释为:

System.out.println((s1==(null+" "+s2))==null);

......这没有任何意义。

目前尚不清楚您希望这三行中的任何一行做什么,但您应该使用括号使编译器和读者都清楚您的意图。例如:

System.out.println((s1 == null) + " " + (s2==null));
System.out.println((s1 == null) + " ");
System.out.println((s2 == null) + " ");

或者您可以使用局部变量使其更清晰:

boolean s1IsNull = s1 == null;
boolena s2IsNull = s2 == null;

System.out.println(s1IsNull + " " + s2IsNull);
System.out.println(s1IsNull + " ");
System.out.println(s2IsNull + " ");
于 2013-05-10T12:16:20.737 回答
2

+之前得到处理==

这将导致s1 == " " == null

于 2013-05-10T12:18:07.817 回答