第一行的行为符合我的预期,第二行未编译并显示错误消息:
The method println(char[]) is ambiguous for the type PrintStream
我不明白,我认为带有可选的括号只是为了可读性。
System.out.println("" + (string == null ? null : null));
System.out.println("" + string == null ? null : null);
最佳答案
编译器读取后者如下:
System.out.println( ( <b>("" + string)</b> == null ) ? null : null);
因此它已将 ""+ string
组合在一起。
因此,这意味着,无论条件结果如何,都会返回 null
或 null
。现在 null
没有专用类型:任何类型的对象都可以是 null
。所以 Java 不知道要调用什么方法。你可以这样写:
System.out.println(null);
它会导致相同错误。既然有a lot of methods可以使用 null
调用:
public void print(char[] s) public void print(String s) public void print(Object obj)
对于第一个代码片段,情况并非如此,因为编译器将其解释为:
System.out.println( "" <b>(string == null ? null : null)</b>);
所以在这里添加 null
到String
。因此,输出也是一个String
,因此编译器完全知道选择什么方法。
关于java - 字符串连接中带或不带大括号可选,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44137101/