[英]Java: How do I check if an element in an array has been initialized?
我想檢查數組中的某個元素是否已經初始化,我該怎么做?
數組中的所有值都在創建數組時初始化。
可以顯式設置初始值(例如X[] xs = {x1, ..., xN};
),或者在實例化數組時分配默認值。
對於對象數組,每個元素的默認值為null
; 對於boolean
數組,該值為false
; 對於byte
、 char
、 int
、 long
數組,該值將為0
,對於float
或double
數組,該值將為0.0
。
那么,你可以檢查它是否被設置為沒有默認值,例如
String[] array = getArrayFromSomewhere();
if (array[10] != null)
{
...
}
(對於原始類型,您將使用0
、 '\0'
、 false
等)
但是,未初始化是不一樣的。 在設置為不同的值后,它可能已設置為 null。
數組不會記錄某個元素是否已被專門設置——元素都被初始化為默認值,僅此而已。
String[] X; // X has not been initialized
try {
System.out.println(""+X.length); // This will crash if X is not initialized
} catch (NullPointerException e) { // X is empty
System.out.println("X has not been initialized.");
// Do whatever you want here with X
}
在已經批准的答案之上,您可以在 jshell 中使用java9+進行驗證,因為它會告訴您默認索引值。
原始數組
jshell> byte[] data = new byte[10]
data ==> byte[10] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
jshell> int[] data = new int[10]
data ==> int[10] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
jshell> char[] data = new char[10]
data ==> char[10] { '\000', '\000', '\000', '\000', '\000' ... , '\000', '\000', '\000' }
jshell> boolean[] data = new boolean[10]
data ==> boolean[10] { false, false, false, false, false, ... lse, false, false, false }
對象數組
jshell> String[] data = new String[10]
data ==> String[10] { null, null, null, null, null, null, null, null, null, null }
檢查的簡單方法是:
int[] ar = new int[10];
if (ar.length < 0) {
System.out.println("Not initialized ");
} else {
System.out.println("Initialized");
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.