gpt4 book ai didi

java - Java 语言规范的哪一部分描述了省略可变参数的行为?

转载 作者:搜寻专家 更新时间:2023-10-31 19:34:31 26 4
gpt4 key购买 nike

我正在寻找 Java 语言规范 (JLS) 的相关部分,它描述了调用可变元数 (vararg) 方法时的行为。

考虑方法:

public static void printVarArgs(String... args) {
System.out.println(Arrays.toString(args));
}

如果我这样调用方法:

printVarArgs();

输出将如下所示:[] 因为在调用站点省略 args 已在 printVarArgs 中转换为空数组> 方法。

我正在寻找定义此行为的 JLS 的要点。我找到的最接近的是 15.12.4.2 Evaluate Arguments , 但它没有给出这个例子,我不确定这个案例是否真的包含在形式/数学描述中。

JLS 的哪一部分描述了在省略可变参数时自动创建一个空数组?

最佳答案

该 JLS 部分的文本说:

If the method being invoked is a variable arity method (§8.4.1) m, it necessarily has n > 0 formal parameters. The final formal parameter of m necessarily has type T[] for some T, and m is necessarily being invoked with k >= 0 actual argument expressions.

If m is being invoked with kn actual argument expressions, or, if m is being invoked with k != n actual argument expressions and the type of the kth argument expression is not assignment compatible with T[], then the argument list (e1, ... , en-1, en, ...ek) is evaluated as if it were written as (e1, ..., en-1, new T[]{en, ..., ek}).

在你所说的情况下,有 k == n - 1 个形式参数,所以 en, ..., ek 是一个空序列,并且这意味着参数被计算为 (e1, ..., en-1, new T[]{})

换句话说,行为是在您查看的部分中指定的。

关于java - Java 语言规范的哪一部分描述了省略可变参数的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10905942/

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