mas*_*san 14 java arrays int null
我是Java的新手,并且在整数数组中检查null元素时遇到问题.我正在使用Eclipse进行编辑,并且检查null元素的行显示错误:
抱怨的行:
if(a[i] != null) {
Run Code Online (Sandbox Code Playgroud)
来自Eclipse的错误信息:
The operator != is undefined for the argument type(s) int, null
Run Code Online (Sandbox Code Playgroud)
在PHP中,这没有任何问题,但在Java中,似乎我必须将数组类型从整数更改为Object以使该行不被抱怨(如下所示)
Object[] a = new Object[3];
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,如果我仍然想要声明为整数数组并且仍然想要检查null,它的语法是什么?
码:
public void test() {
int[] a = new int[3];
for(int i=0; i<a.length; i++) {
if(a[i] != null) { //this line complains...
System.out.println('null!');
}
}
}
Run Code Online (Sandbox Code Playgroud)
Jus*_*ini 23
在Java中,a int是原始类型,不可能null.但是,对象存储为引用,因此如果声明对象引用但不创建new对象,则引用将是null.
Integers是对象包装器ints,意味着它们可以null.
public void test() {
Integer[] a = new Integer[3];
for(int i=0; i<a.length; i++) {
if(a[i] != null) { //should now compile
System.out.println('null!');
}
}
}
Run Code Online (Sandbox Code Playgroud)
An int是基本类型,与引用类型不同.只有引用类型才能具有该值null.
Integervsintjava.lang.Integer实际上是一种引用类型,原始类型的指定"盒子"类型int.因此,Integer变量可以具有该值null.
随着引进的Java自动装箱的,从转换int到Integer,反之亦然,可以隐式进行.但请记住,它们是非常不同的类型,实际上尝试取消装箱null将会抛出NullPointerException.
Integer成为参考类型的后果已经提到了一个结果:Integer变量可以有一个null值.另一个是==两个运算符Integer是参考标识比较,而不是数字相等.
System.out.println(new Integer(0) == new Integer(0)); // prints "false"
Run Code Online (Sandbox Code Playgroud)
只要有可能,您应该更喜欢原始类型到盒装类型.以下是Effective Java 2nd Edition的引用,第49项:首选原始类型为盒装基元(作者强调):
总之,只要您有选择,就可以使用原始优先于盒装原语.原始类型更简单,更快捷.如果你必须使用盒装基元,小心!自动装箱减少了使用盒装基元的冗长,但没有降低危险.当您的程序将两个盒装基元与
==运算符进行比较时,它会进行身份比较,这几乎肯定不是您想要的.当你的程序进行涉及盒装和未装箱原语的混合型计算时,它会进行拆箱,当你的程序进行拆箱时,它就会抛出NullPointerException.最后,当您的程序框原始值时,它可能导致代价高昂且不必要的对象创建.
==行为Integer和int操作数的行为方式Integer必须使用Integer必须使用一个明显的例外int:泛型.Java泛型中的类型参数必须是引用类型.所以你不能拥有List<int>Java; 你必须List<Integer>改用.
如果你必须有一个int[]允许null值,那么快速回答是使用Integer[].由于您现在有一个引用类型数组,因此可以使用一些元素null.请注意使用引用类型的所有后果,否则您可能会遇到意外情况.
但是,在这一点上,我会认真考虑使用List<Integer>(参见Effective Java 2nd Edition:Prefer list to arrays).列表比数组功能更丰富,并且它与更大的Java Collections Framework良好互操作.
| 归档时间: |
|
| 查看次数: |
43046 次 |
| 最近记录: |