2011-09-21 83 views
21

在C#中,我可以使用一個變量來允許帶有問號的空值。我想要一個true/false/null結果。我想默認情況下它設置爲空。測試結果會將布爾值設置爲true/false,但有時候測試不會運行,並且java中的布爾值默認爲false,所以第三種測試方法會很好。Java允許可空類型嗎?

C#示例:

bool? bPassed = null; 

的Java是否有類似這樣的東西?

+4

Java具有可爲空的引用類型,但不包含可爲空的基元。 – BoltClock

回答

32

相反,可以使用盒裝Boolean類(這是一個普通的類,而基元類型),或一個三值enum

+0

換句話說,「是」,因爲相應的類的行爲與C#相同(除了C#版本是結構,Java是類)。 – ToolmakerSteve

+1

@ToolmakerSteve:No;它們在許多方面並不相同。 – SLaks

+1

@SLaks「他們是不一樣的,在很多方面」你能提供一些例子和/或相關鏈接嗎?謝謝。 –

7

不,在java primitives不能有空值,如果你想要這個功能,你可能想用Boolean代替。

12

你可以使用:

Boolean b = null;

就是在Java中的java.lang.Boolean對象。

Boolean b = true;Boolean b = false;

5

在Java中,基本類型不能爲null:

然後還通過簡單的分配集合。但是,您可以使用Boolean和朋友。

2

沒有,但你可以使用Boolean類代替原始boolean類型把null

7

當然可以。

爲了做到這一點,java爲每個基本類型都有一個包裝類。如果您將變量設置爲包裝類的實例,則它可以像任何常規變量一樣分配爲null

相反的:

boolean myval; 

...您可以使用:

Boolean myval = null; 

您可以指定它是這樣的:

myval = new Boolean(true); 

...並獲取其原始值像這樣:

if (myval.booleanValue() == false) { 
    // ... 
} 

每個原語類型(intbooleanfloat,...)具有相應的包裝類型(IntegerBooleanFloat,...)。

Java的autoboxing功能允許編譯器有時自動將封裝器類型強制爲其原始值,反之亦然。但是,如果編譯器無法解決問題,則可以始終手動執行。

0

如果您正在使用的對象,它允許null

如果您使用的基本數據類型,它允許null

,之所以Java有Wrapper Class

2

當然,你可以去與布爾,但更明顯,你的類型可以有「價值」或「沒有價值」,這是很容易做一個包裝類,或多或少做什麼?類型在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

相關問題