[英]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.