gpt4 book ai didi

java - 在java中通过三元运算符传递方法参数

转载 作者:搜寻专家 更新时间:2023-11-01 02:03:12 24 4
gpt4 key购买 nike

代码:

public class Foo {

static void test(String s){
System.out.println("String called");
}

static void test(int s){
System.out.println("int called");
}

public static void main(String[] args) throws Exception {

test(5>8? 5:8); // Line 1
test(5>8? "he":"ha"); // Line 2

test(5>8? 5:"ha"); // Line 3

System.out.println(5<8? 5:"ha"); //Line 4
}
}

当我执行此代码时,我在 Line 3 处收到以下错误

Foo.java:24: error: no suitable method found for test(INT#1)
test(5>8? 5:"ha"); // Line 3
^

在三元运算符中使用类似的类型不会出错。但是使用不同的类型只会给方法调用带来错误 test(5>8? 5:"ha");但它适用于调用 System.out.println(5<8? 5:"ha");

当我添加另一个重载方法时 static void test(Object s){} , 然后是 //Line 3编译。

任何人都可以向我解释一下这种情况吗?

最佳答案

Java 中的每个表达式都有一个类型。 Java 语言规范中有一些复杂的规则,在 the conditional operator 部分告诉我们如何找到条件表达式的类型,例如 5 > 8 ? 5:“哈”。但简单来说,您总是会得到第二个和第三个参数都是其成员的最具体的类型。

  • 5 > 8 ? 5 : 858都是int,所以整个表达式的类型都是int .
  • 5 > 8 ? "he": "ha""he""ha" 都是 String,所以整个表达式的类型字符串
  • 5 > 8 ? 5 : "ha",最适合5"ha" 的类型是Object。所以整个表达式的类型都是 Object

现在,由于您有接受 intStringtest 版本,表达式 test ( 5 > 8 ? 5 : 8 )test ( 5 > 8 ? "he": "ha") 都可以编译。

但是如果您没有接受Objecttest 版本,那么test ( 5 > 8 ? 5 : "ha") 无法编译。

这是过于简单化了。规则比我描述的要复杂得多,但这主要是因为它们考虑了涉及 null 操作数、自动装箱和自动拆箱的各种情况。

关于java - 在java中通过三元运算符传递方法参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40521120/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com