Java 中带有 null 参数的 Varargs

2023-11-24

以下代码仅使用空引用作为可变参数参数。

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]=null and str[1]=null.

但后来打电话给temp(null);导致NullPointerException被抛出,这似乎是str本身就是null.

如果它的类型转换为String像这样的东西temp((String)null);,它工作并显示[null].

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


在我看来,它被认为是一个带有 null 的字符串数组 与第一次调用不同的参考

确切地。这就是正在发生的事情。

其实,这只是关于precedence之间: -exact-match, var-args, boxing and type-casting.

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

精确匹配 > 类型转换 > 拳击 > 可变参数

所以,你可以看到,var-args具有最低的优先级,并且exact-match具有最高优先级。这意味着,如果一个argument is good-enough for an exact-match那么它将被视为这样。

现在,当你经过null作为一个论证,那么null可以直接传给你的var-args参数为value of reference。它是一个exact match为参数。
所以,你需要typecast它明确地String告诉它实际上是你的第一个元素var-args范围

然而,如果null, null,它将被视为two你的元素var-args。因为它不可能是一个value of reference.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 中带有 null 参数的 Varargs 的相关文章

随机推荐

  • 即使引发异常,AssertRaises 也会失败

    我遇到了以下相当奇怪的问题 我正在开发一个 django 应用程序 在我的模型类中 我定义了一个在验证失败时应引发的异常 class MissingValueException Exception Raise when a required
  • 准备好的语句参数索引超出范围 (0 < 1 )

    我不是 Web 应用程序方面的专家 最近正在使用 servlet 为我的移动应用程序编写一个小型 Web 应用程序 我的议程是从客户端接收数据 并将其放入数据库 一切都运行良好 除了我的数据库插入语句 它试图使用PreparedStatem
  • 错误:在 Android Studio 中必须具有透明或白色的单像素框架

    我刚刚将一个项目从 eclipse 导入到 Android studio 几乎对于每第二张图像 android studio 都会给出以下错误 Error Must have one pixel frame that is either t
  • 在 iOS 7 中获取联系人

    此代码适用于 iOS 5 iOS 6 但不适用于 iOS 7 CFErrorRef error NULL ABAddressBookRef addressBook ABAddressBookCreateWithOptions NULL er
  • scikit-learn 交叉验证,带有均方误差的负值

    当我将以下代码与数据矩阵一起使用时X大小 952 144 和输出向量y尺寸 952 mean squared errormetric 返回负值 这是意外的 你有什么主意吗 from sklearn svm import SVR from s
  • Sitecore 工作流程和标准值继承的烦人问题

    现在我在 sitecore 工作流程方面遇到问题 问题如下 我的模板标准值已设置工作流程和默认工作流程字段集 工作流程状态设置为草稿 但是 每次我从此模板创建项目时 它都不会继承工作流程部分字段 所有字段都是空的 如果我手动设置项目的工作流
  • Dart:使用正则表达式删除字符串中的空格

    我正在尝试使用 Dart 和 Regexp 删除字符串中的所有空格 给定以下字符串 test test1 test2 我想得到 testtest1test2 我已经阅读了 javascript 中的一些示例 但它们似乎在 Dart 中不起作
  • 如何有效地处理 maven-3 带时间戳的快照?

    现在 maven 3 做到了放弃支持对于快照工件的 false 您似乎确实需要使用带时间戳的快照 特别是 m2eclipse 它在内部使用 maven 3 似乎受到它的影响 当快照不唯一时 更新快照不起作用 看起来最好之前练习将所有快照设置
  • 如何使用Excel VBA获取新插入记录的id?

    这似乎是一个很常见的问题 但大多数解决方案都涉及连接多个 SQL 命令 我相信这是 ADO VBA 无法完成的 不过 我很高兴在这方面被证明是错误的 我当前插入新记录 然后使用 我希望 足够的字段运行选择查询 以保证仅返回新插入的记录 我的
  • 左连接 Django ORM

    我有以下型号 class Volunteer models Model first name models CharField max length 50L last name models CharField max length 50L
  • MSDeploy 无法部署手动压缩包

    早些时候我使用 msbuild exe 构建和部署 Web 项目 现在我想在部署之前修改一些文件 所以我使用msbuild制作一个 zip包 然后解压缩它 修改一些文件然后再次压缩它并尝试使用msdeploy进行部署 问题是 它部署空文件夹
  • 在 Xcode ios 8.1 中通话时启用和禁用扬声器

    我需要在从应用程序呼叫时启用扬声器 我可以成功启用它 但无法禁用它 我正在使用这个方法 UIDevice currentDevice setProximityMonitoringEnabled NO NSLog d enable UInt3
  • 如何将具有不同第二类型的“std::pair”的可变数量传递给函数

    抱歉 由于问题的复杂性 无法解释标题本身的主要问题 需要通过各种类型的std pair如下所示的方法 foo 1 1 2 2 2 3 3 first is always int 但是 我无法找出语法如何定义foo 使用可变参数模板 这更多的
  • 在 .NET Core 中将 Word doc 和 docx 格式转换为 PDF,无需 Microsoft.Office.Interop

    我需要显示Word doc and docx浏览器中的文件 没有真正的客户端方法可以执行此操作 并且由于法律原因 这些文档无法与 Google 文档或 Microsoft Office 365 共享 浏览器不能显示Word 但可以显示PDF
  • izpack:在 Windows 上创建快捷方式

    我使用 izpack 为我的应用程序创建安装程序 到目前为止 我已经能够创建安装程序 并且在我的 Linux 机器上一切都很好 问题是 在我测试的 Windows 机器上 Win7 和 WinXP 安装程序没有显示快捷方式面板 我确实阅读了
  • 如何将 pyw 文件转换为 exe?

    我怎样才能转换pyw文件至exe使用 pyinstaller 如果不可能 我该如何使用 py2exe 来做到这一点 我在用python 3 只需运行以下命令 pyinstaller w your file name pyw 注意 运行上述命
  • 使用 Python 对多部分电子邮件进行 PGP 签名

    我目前正在尝试添加 PGP 签名支持我的小电子邮件发送脚本 它使用 Python 3 x 和python gnupg模块 签署消息的代码是 gpg gnupg GPG basetext basemsg as string replace n
  • Python、IMAP 和 GMail。将消息标记为已读

    我有一个 python 脚本 它必须获取未见的消息 对其进行处理 然后标记为已见 或已读 我在登录后执行此操作 typ data self server imap server search None UNSEEN for num in d
  • Spring OAuth2刷新令牌在刷新访问令牌后发生变化

    我创建了一个身份验证服务器和资源服务器 两者都工作正常 唯一的问题是刷新令牌 我希望它在调用后更改POST oauth token with grant type refresh token但是 spring 返回相同的刷新令牌 我想知道在
  • Java 中带有 null 参数的 Varargs

    以下代码仅使用空引用作为可变参数参数 package currenttime import java util Arrays public class Main private static void temp String str Sys