簡體   English   中英

Java:如何檢查數組中的元素是否已初始化?

[英]Java: How do I check if an element in an array has been initialized?

我想檢查數組中的某個元素是否已經初始化,我該怎么做?

數組中的所有值都在創建數組時初始化。

可以顯式設置初始值(例如X[] xs = {x1, ..., xN}; ),或者在實例化數組時分配默認值。

對於對象數組,每個元素的默認值為null 對於boolean數組,該值為false 對於bytecharintlong數組,該值將為0 ,對於floatdouble數組,該值將為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM