java - 字符串连接中带或不带大括号可选

标签 java string concatenation brackets

第一行的行为符合我的预期,第二行未编译并显示错误消息:

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 组合在一起。

因此,这意味着,无论条件结果如何,都会返回 nullnull。现在 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>);

所以在这里添加 nullString。因此,输出也是一个String,因此编译器完全知道选择什么方法。

关于java - 字符串连接中带或不带大括号可选,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44137101/

相关文章:

java - 在android中单击按钮后如何锁定微调器

java - Java中集合对象的最大值

java - 重命名参数化测试方法

jquery - 检索 jQuery 选择器的字符串表示形式

PHP:在 mysql 中搜索组合字段中的多个 AND 条件

java - 如何在 Java Sun HttpsServer 中使用 LetsEncrypt 证书?

android - 如何使用 Joda-Time 将名称回历月显示为字符串?

python - 输入字符串列表 Python

MySQL INTO OUTFILE 查询问题

python - numpy 在 tensorflow 上的 hstack 用于单个矩阵/张量