在C#中,我可以使用一個變量來允許帶有問號的空值。我想要一個true/false/null結果。我想默認情況下它設置爲空。測試結果會將布爾值設置爲true/false,但有時候測試不會運行,並且java中的布爾值默認爲false,所以第三種測試方法會很好。Java允許可空類型嗎?
C#示例:
bool? bPassed = null;
的Java是否有類似這樣的東西?
在C#中,我可以使用一個變量來允許帶有問號的空值。我想要一個true/false/null結果。我想默認情況下它設置爲空。測試結果會將布爾值設置爲true/false,但有時候測試不會運行,並且java中的布爾值默認爲false,所以第三種測試方法會很好。Java允許可空類型嗎?
C#示例:
bool? bPassed = null;
的Java是否有類似這樣的東西?
號
相反,可以使用盒裝Boolean
類(這是一個普通的類,而基元類型),或一個三值enum
。
換句話說,「是」,因爲相應的類的行爲與C#相同(除了C#版本是結構,Java是類)。 – ToolmakerSteve
@ToolmakerSteve:No;它們在許多方面並不相同。 – SLaks
@SLaks「他們是不一樣的,在很多方面」你能提供一些例子和/或相關鏈接嗎?謝謝。 –
不,在java primitives不能有空值,如果你想要這個功能,你可能想用Boolean代替。
你可以使用:
Boolean b = null;
就是在Java中的java.lang.Boolean
對象。
Boolean b = true;
或 Boolean b = false;
在Java中,基本類型不能爲null:
然後還通過簡單的分配集合真或假。但是,您可以使用Boolean
和朋友。
沒有,但你可以使用Boolean
類代替原始boolean
類型把null
當然可以。
爲了做到這一點,java爲每個基本類型都有一個包裝類。如果您將變量設置爲包裝類的實例,則它可以像任何常規變量一樣分配爲null
。
相反的:
boolean myval;
...您可以使用:
Boolean myval = null;
您可以指定它是這樣的:
myval = new Boolean(true);
...並獲取其原始值像這樣:
if (myval.booleanValue() == false) {
// ...
}
每個原語類型(int
,boolean
,float
,...)具有相應的包裝類型(Integer
,Boolean
,Float
,...)。
Java的autoboxing功能允許編譯器有時自動將封裝器類型強制爲其原始值,反之亦然。但是,如果編譯器無法解決問題,則可以始終手動執行。
當然,你可以去與布爾,但更明顯,你的類型可以有「價值」或「沒有價值」,這是很容易做一個包裝類,或多或少做什麼?
類型在C#中做:
public class Nullable<T> {
private T value;
public Nullable() { value = null; }
public Nullable(T init) { value = init; }
public void set(T v) { value = v; }
public boolean hasValue() { return value != null; }
public T value() { return value; }
public T valueOrDefault(T defaultValue) { return value == null ? defaultValue : value; }
}
然後你可以使用它像這樣:
private Nullable<Integer> myInt = new Nullable<>();
...
myInt.set(5);
...
if (myInt.hasValue())
....
int foo = myInt.valueOrDefault(10);
注意,這樣的事情是因爲Java8標準是:Optional
類。 https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html
Java具有可爲空的引用類型,但不包含可爲空的基元。 – BoltClock