2013-09-23 81 views
2

對不起,如果這是一個愚蠢的問題。我是Java新手(來自PHP背景)。所以這就是我所擁有的。Java變量類型

String variable = new String("whatever"); 
    //instanceof String == true here 
    variable = null; 
    //whereas here instanceof String == false 
    variable = new Integer(3);// error 

不設置變量爲null刪除它的refference,因爲我用對象類型實例化它? 有沒有辦法讓我保留變量名,但改變它的數據類型?謝謝

+0

在它的聲明中沒有定義變量類型。 – Thihara

+4

參考 - 是的。類型 - 不。它停留在那裏。 – ppeterka

回答

9

Java是一種強類型語言。

當您指定variable作爲String時,它始終是一個字符串。如果你嘗試給它分配一個無效類型,編譯器會給你一個錯誤,因爲你試圖混合類型。

在Java中將某些內容設置爲null不會更改類型。當然,你可以讓一個變量來走出去的範圍,然後再創建一個使用不同的類型,例如:

if (x == 1) { 
    String variable = "whatever"; 
    ... 
} 
else { 
    Integer variable = new Integer(3); 
    ... 
} 

(二次變量名稱可能是混亂的,當然)。

你會注意到的另一件事是子類可以分配給指定爲超類的類型。例如,類Integer是類Number的子類,所以你可以這樣做:

Number variable = new Integer(3); 
1

Java是強烈的,靜態類型。所以引用(變量)只能指向它們自己的類型或子類的對象。 所以Object變量可以引用java中的任何其他類,因爲它是一個超類。 String不能用於指代Integer,因爲它不是String的子類。

你在java中的壁櫥裏的東西是varObject

1

Java是一種強類型語言,我不鼓勵你與之戰鬥。

很正常的事情在Java中做的是寫

Integer myConvertedInt = Integer.parseInt(variable) 

此外,Java有一個syntatic快捷鍵,讓你(字符串)寫

String variable = "whatever"; 

可以達到什麼你想通過使用Object類型(它是所有Java非POD類型的基類)來完成。但是這涉及到投射,並且實際上是對該語言的濫用。

1

這裏有兩個相關但不同的問題:一個變量的類型和一個對象的類。

instanceof測試由變量或表達式引用的對象的類,並且定義爲如果由於引用爲空而沒有對象,則返回true。

如果引用不爲null,則它必須指向適合其類型的類的對象。

獲得靈活性的方法是爲變量的類型使用通用接口。如果你聲明一個變量類型爲java.util.List,它可以指向一個ArrayList或者一個LinkedList,...

你甚至可以創建一個變量類型的Object。在這種情況下,它可以引用任何對象,但是會失去Java的很多好處。實際上,您將以更適合於沒有靜態類型的語言的風格進行書寫。