2014-04-07 67 views
0

我如何測試未初始化的byte in JavaJava:測試未初始化的字節

這不起作用:

byte b; 

if (b != null) { 
    // Do something 
} 
+0

你不知道。如果它是單元化的,則不能將其用作值。這是一種語言功能。也許你正在尋找引用類型變量設置爲'null'? –

+1

簡單測試:如果它沒有編譯,那麼它是未初始化的 – Baby

+1

如果真的很重要,你辨別是否已賦值,只需使用具有默認'null'值的'Byte'類, – Obicere

回答

2

有作爲「未初始化byte」沒有這樣的事,因爲編譯器不會讓你編寫使用未初始化值(代碼說明:未明確分配一個值是自動初始化爲0場/假/空)。

您有幾個選項。

你可以使用一個包裝類型,它可以是null,如:

Byte b = null; 

if (b != null) { 
    ... 
} 

你可以使用一個特殊的價值,但你必須確保它不會有意義的值重疊:

byte b = -1; 

if (b != -1) { 
    ... 
} 

你可以做上面的一個變種,但具有更大的類型(這是怎麼了,例如,InputStream.read()表示EOF),使「神奇」的價值不能在有效範圍:

int b = -1; 

if (b != -1) { 
    // then b is in [0, 255] (unsigned byte in this example) 
    ... 
} 

你可以存儲第二標記,指示初始化狀態:

boolean bInitialized = false; 
byte b = 0; // arbitrary 

if (bInitialized) { 
    ... 
} 

你也可以返工您的應用程序邏輯,以避免做擺在首位這個測試,說實話,是我建議如果可能的話。

1

Java語言規範中說,按照程序有關the initial value of variables

每個變量的值必須前的值是用於 :

[...]

本地變量(§14 .4,§14.14)在使用之前,必須通過初始化(第14.4節)或分配 (第15.26節)以可使用the rules for definite assignment (§16)進行驗證的方式明確給出值 。

因此,您不能使用變量的值,直到給它一個值。

此外,在您的示例中,b永遠不可能是null,因爲它是原始類型,並且該代碼段也不會因此而編譯。

正如評論中所建議的那樣,您可以使用參考類型並將其設置爲null來表示特殊情況。

0

局部變量的初始化狀態在編譯時已知。據我所知,沒有語言功能來查詢該狀態。*此外,由於編譯器不會允許您在初始化之前讀取局部變量,所以在運行時不會有任何運氣無論是。我想你可以通過嘗試從它讀取並查看編譯器是否允許它進行查詢。大聲笑