0
A
回答
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
局部變量的初始化狀態在編譯時已知。據我所知,沒有語言功能來查詢該狀態。*此外,由於編譯器不會允許您在初始化之前讀取局部變量,所以在運行時不會有任何運氣無論是。我想你可以通過嘗試從它讀取並查看編譯器是否允許它進行查詢。大聲笑
相關問題
- 1. Valgrind - 未初始化的值和字節?
- 2. Mockito測試未能初始化
- 3. 單元測試未初始化
- 4. 初始化的unique_ptr測試
- 5. 調試測試 - 未執行。等待測試初始化
- 6. java變量未初始化
- 7. GAE未初始化JAVA
- 8. 未初始化的字符
- 9. NameError:嘗試執行rails測試時未初始化的常量
- 10. 字體未初始化
- 11. 初始化節點列表的Java
- 12. java中的初始化初始化
- 13. Java字段初始化
- 14. 靜態初始化:測試的ExceptionInInitializerError
- 15. Perl:調試未初始化的s ///?
- 16. Rails中未初始化的常量錯誤與新測試
- 17. Ruby測試單元:未初始化的常量Test :: Unit :: UnitCase
- 18. 未在maven測試下運行的Spring ContextConfiguration初始化程序
- 19. 未初始化不斷類名上RSpec的測試
- 20. Valgrind的叫喊關於未初始化的字節
- 21. 谷歌測試:「字符數組的寬字符串初始化」
- 22. 未初始化的初始值常量
- 23. Valgrind在使用空類時報告未初始化的字節
- 24. c linux stat param指向未初始化的字節?
- 25. 將struct + write(buf)指向未初始化的字節
- 26. 「指向未初始化的字節」Valgrind錯誤
- 27. 如何用全0初始化java中的100個字節的字節數組
- 28. 紅寶石/黃瓜測試初始化
- 29. 測試AngularJS服務初始化
- 30. 用測試數據初始化Bigtable
你不知道。如果它是單元化的,則不能將其用作值。這是一種語言功能。也許你正在尋找引用類型變量設置爲'null'? –
簡單測試:如果它沒有編譯,那麼它是未初始化的 – Baby
如果真的很重要,你辨別是否已賦值,只需使用具有默認'null'值的'Byte'類, – Obicere