java - 为什么表达式 `(true) ? null: null` 被视为 char[]

标签 java expression

System.out.println((true) ? null: null);

问题:

为什么我有

The method println(char[]) is ambiguous for the type PrintStream

以及为什么不计算它,而将null作为参数传递给println方法以其他方式,为什么表达式(真)? null:null 被视为 char[]

编辑:IDE 使用 Eclipse。

最佳答案

您没有正确指定错误。

查看 PrintStream.println() 的重载.您会注意到唯一的引用类型是 char[] , StringObject .

Netbeans 给我错误

Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - reference to println is ambiguous both method println(char[]) in java.io.PrintStream and method println(java.lang.String) in java.io.PrintStream match

这正是我们所期望的方式:它不能在两者之间进行选择,因为两者都同样有效。

它没有提到 Object 重载的原因可以在 JLS 的小字中找到,章节 $15.12.2. Compile-Time Step 2: Determine Method Signature :

For example, declaring m(Object...) in a class which already declares m(Object) causes m(Object) to no longer be chosen for some invocation expressions (such as m(null)), as m(Object[]) is more specific.

你可以在第一阶段的解释中找到这个。

关于java - 为什么表达式 `(true) ? null: null` 被视为 char[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25246646/

相关文章:

java - 在java中分别使用相同的方法名实现和扩展接口(interface)和抽象类

java - 在 Java 中处理异常 - 如何给用户另一次机会?

expression - Autohotkey 单行代码?

linux - 在算术表达式中,为什么递增变量会修改原始变量而其他操作不会?

c#将表达式中的字符串转换为int

c# - 通用表达式过滤器

java - android通知显示来自没有unicode的字符串的图像

java - hibernate JPA 查询仅适用于命名空间

java - 在 List 属性上使用不带元模型的 JPA2 标准 API

r - 如何向 ggplot2 axis.text 添加下标