gpt4 book ai didi

java - Java 中带有空参数的 Varargs

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:40:29 24 4
gpt4 key购买 nike

以下代码简单地使用空引用作为可变参数。

package currenttime;

import java.util.Arrays;

public class Main
{
private static void temp(String...str)
{
System.out.println(Arrays.asList(str));
}

public static void main(String[] args)
{
temp(null,null);
temp(null);
}
}

第一次调用方法temp(null, null);显示[null, null]表示str[0]=nullstr[1]=null

但稍后对 temp(null); 的调用导致抛出 NullPointerException,这似乎是 str 本身是

如果它被类型转换为 String 类似这样的 temp((String)null);,它会工作并显示 [null]

为什么在最后一次调用中,需要显式类型转换? 在我看来,它被认为是一个带有 null 引用的字符串数组,这与第一次调用不同。正确答案是什么?

最佳答案

It seems to me that it's considered to be a string array with a null reference which is different from the first call

没错。这就是正在发生的事情。

实际上,它只是关于优先级:- exact-matchvar-argsboxing类型转换

编译器在检查要调用的方法或如何传递参数时遵循以下优先级:-

Exact-Match > Type-Cast > Boxing > Var-args

因此,您可以看到,var-args 的优先级最低,exact-match 的优先级最高。这意味着,如果一个 argument 对于 exact-match 来说是 good-enough 那么它将被认为是这样。

现在,当您将 null 作为参数传递时,null 可以直接作为 传递给您的 var-args 参数>引用值。它是参数的完全匹配
因此,您需要将其显式类型转换String,以表明它实际上是var-args 参数

的第一个元素

而在 null, null 的情况下,它将被视为 var-args两个 元素。因为它不能是一个引用值

关于java - Java 中带有空参数的 Varargs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12870021/

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