gpt4 book ai didi

java - 理解 Java 的可变参数

转载 作者:行者123 更新时间:2023-12-01 19:33:18 26 4
gpt4 key购买 nike

鉴于 void foo(Boolean... bars)函数,bars的值在以下函数调用中,其行为与显然应有的行为非常不同:

  • foo(), bars = Boolean[0]
  • foo(null), bars = null
  • foo(null, null), bars = Boolean[2] { null, null }

为什么调用 foo(null) 会产生 bars = null而不是Boolean[1] { null } ?这是在 Java 8 上重现的。

最佳答案

这是因为 determining method signature 的三阶段方法:

  1. 通过严格调用识别适用的匹配参数方法
  2. 识别松散调用适用的匹配参数方法
  3. 识别变量参数调用适用的方法

foo(null) 在第 1 阶段匹配,因为接受 Boolean[] 的方法允许使用单个 null 参数,因为您可以强制转换 nullBoolean[](或者实际上是任何引用类型)。

foo(null, null) 在第 3 阶段进行匹配,因为此时变量数量方法进行匹配。假设您没有 foo 的 2-arg 重载,则在此之前它无法匹配,因为匹配方法需要两个参数。

关于java - 理解 Java 的可变参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58802725/

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