java – 使用(int … i)和(Integer … i)的varagrs有什么区别
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 使用(int … i)和(Integer … i)的varagrs有什么区别,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1386字,纯文字阅读大概需要2分钟。
内容图文
![java – 使用(int … i)和(Integer … i)的varagrs有什么区别](/upload/InfoBanner/zyjiaocheng/806/01fb52a1da9942488e6f7e5f00a3138a.jpg)
当我使用两个不同的varargs(Integer … i)和(int … i)运行此代码时,带有(Integer … i)的代码输出显示警告消息,另一个正确运行.但我无法理解它们之间的差异.
public static void test(Integer...i) {
System.out.println("int array");
}
public static void main(String[] args) {
test(null);
}
运行此代码时,会显示警告消息.
File.java:11: warning: non-varargs call of varargs method with inexact argument type for last parameter;
test(null);
^cast to Integer for a varargs call
但是当我将varargs(Integer … i)更改为(int … i)时,代码运行得非常完美.
public static void test(int...i) {
System.out.println("int array");
}
public static void main(String[] args) {
test(null);
}
输出显示为:
int array
解决方法:
要记住的一件重要事情是varargs被编译为创建和接受数组.那是,
void test(Integer... i)
和
void test(Integer[] i)
实际上是一回事. (挥手.有一些簿记差异.)当你打电话时:
test(i1, i2, i3);
……电话真的是
test(new Integer[] { i1, i2, i3 });
这就是问题的根源.
使用Integer …,当你使用test(null)时,你说你想要传递null作为可能是几个的第一个整数,因为Integer是一个引用类型,所以null可以匹配它.所以你要为数组中的第一个条目传递一个不精确的类型,比如这个测试(new Integer [] {null}).
使用int …,当您使用test(null)时,null不能是第一个int,因为int不是引用类型.因此编译器确定您将null作为数组本身传递.您不能尝试进行测试(new int [] {null})因为那将是无效的;所以你必须做test((int [])null).由于null对于int []参数是完全可接受的,因此调用在没有警告的情况下编译.
内容总结
以上是互联网集市为您收集整理的java – 使用(int … i)和(Integer … i)的varagrs有什么区别全部内容,希望文章能够帮你解决java – 使用(int … i)和(Integer … i)的varagrs有什么区别所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。