[英]How to check null element if it is integer array in Java?
我是Java的新手,并且在整数数组中检查null元素时遇到问题。 我正在使用Eclipse进行编辑,并且检查null元素的行显示错误:
抱怨的行:
if(a[i] != null) {
来自Eclipse的错误信息:
The operator != is undefined for the argument type(s) int, null
在PHP中,这没有任何问题,但在Java中,似乎我必须将数组类型从整数更改为Object以使该行不被抱怨(如下所示)
Object[] a = new Object[3];
所以我的问题是,如果我仍然想要声明为整数数组并且仍然想要检查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!');
}
}
}
在Java中, 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!');
}
}
}
int
是基本类型,它与引用类型不同。 只有引用类型的值可以为null
。
Integer
vs int
java.lang.Integer
实际上是一个引用类型,为原始类型int
指定的“box”类型。 因此, Integer
变量的值可以为null
。
通过在Java中引入自动装箱,可以隐式地完成从int
到Integer
转换,反之亦然。 但请记住,它们是非常不同的类型,实际上尝试unbox null
将抛出NullPointerException
。
Integer
作为引用类型的结果 已经提到了一个结果: Integer
变量可以具有null
值。 另一个是两个Integer
上的==
运算符是引用标识比较,而不是数字相等。
System.out.println(new Integer(0) == new Integer(0)); // prints "false"
只要有可能,您应该更喜欢原始类型到盒装类型。 以下是Effective Java 2nd Edition的引用,第49项:首选原始类型为盒装基元 (作者强调):
总之,只要您有选择,就可以使用原始优先于盒装原语。 原始类型更简单,更快捷。 如果你必须使用盒装基元,小心! 自动装箱减少了使用盒装基元的冗长,但没有降低危险 。 当你的程序将两个盒装基元与
==
运算符进行比较时,它会进行身份比较,这几乎肯定不是你想要的。 当您的程序执行涉及盒装和未装箱原语的混合类型计算时,它会进行拆箱, 当您的程序取消装箱时,它会抛出NullPointerException
。 最后,当您的程序框原始值时,它可能导致代价高昂且不必要的对象创建。
==
对于Integer
和int
操作数的行为方式 Integer
有一个明显的例外,其中Integer
必须用于int
:泛型。 Java泛型中的类型参数必须是引用类型。 所以你不能在Java中有一个List<int>
; 您必须使用List<Integer>
。
如果你必须有一个允许null
值的int[]
,那么快速回答就是使用Integer[]
。 由于您现在有一个引用类型数组,因此某些元素可以为null
。 请注意使用引用类型的所有后果,否则您可能会遇到意外情况。
但是,在这一点上,我会认真考虑使用List<Integer>
(参见Effective Java 2nd Edition:Prefer list to arrays )。 列表比数组功能更丰富,并且它与更大的Java Collections Framework良好互操作。
'int'不能为null。 整数(它是一个对象)可以。 所以,正如@Justin所说,Integer []将允许你测试null,但是如果int []对你有效,那么你就不需要为null测试了,因为它不会发生。
int是java中的基本类型,不能为null。 只有对象可以为null。
您可以像这样使用arr [i]!='\\ 0'。 它对我有用。
public class IntNullCheck {
public static void main(String[] args) {
int[] intarr = new int[5];
intarr[0] = 7;
intarr[3] = 9;
for(int n : intarr){
if(n != '\0'){
System.out.println(n);
}else
System.out.println("Null");
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.