一休:愚公,我又有困惑了。
愚公:說說看。
一休:我知道Java有8種基本類型,又發現對應有8個包裝類(Warper),它們起到的作用是相同的,都表示一種類型的數。於是我就隨手編了一句:
int i=Ineger(8);
結果編譯出錯了。
愚公:編程不能想當然。Java的面向對象的原則是數據和數據之上的操作要綁定在一起,這就是類,即引用數據類型。因此,類也是一種類型。Java本來可以不設置基本類型,只是為了提高操作效率,才設置了基本類型。基本類型和引用類型的最主要區別是:
基本類型的變量名是變量本身。
引用類型變量的名字是復雜數據的存儲地點。
這兩種類型的對應存儲方式如圖6所示。
一休:這個問題我明白一點的,例如基本類型表示簡單數據,引用類型表示復雜數據。
愚公:那你舉個例子看看。
一休:比如說,多少錢、多長、多高等這些簡單的數據就可以用基本類型表示。較復雜的事物,就用引用類型表示,如汽車、動物等,這些事物包含很多特性和行為,也就是屬性和操作。
愚公:可以這樣理解。關於對象,有很多概念需要理解清楚。例如,下面的聲明:
String s="Hello world!";
許多人都寫過這樣的語句,但是,我們到底聲明了什么呢?一休,你回答一下。
一休:聲明了一個String對象,內容是"Hello world!"。
愚公:這樣的回答還是比較模糊,准確的回答是這個語句創建了一個字符串對象,另外它聲明了一個指向對象的引用,名為s。它可以指向類型為String的任何對象,目前指向"Hello world!"這個String類型的對象。
一休:也就是說,我們聲明了一個只能指向String對象的引用變量s,並且將s指向了字符串對象"Hello world!"。
愚公:是的,如果在剛才的語句后面再補充一句代碼:
String string=s;
是不是又聲明了一個新的對象呢?
一休:是的,聲明了一個新的對象string。
愚公:不對,我們是聲明了另外一個指向String對象的引用,名為string,並沒有第二個對象產生,string還是指向原來的對象,也就是和s指向同一個對象。String類要弄清楚,因為這個類弄清楚了,許多類就好理解了。
一休:String類這么重要嗎?
愚公:是的,因為這個類使用的頻率很高,包含許多定制好的屬性和方法,我們可以直接使用,而且這個類是final類,我們不能繼承它,也不能繼承和利用多態性修改它的方法。
一休:那我今后一定好好研究它!