java 中的引用資料型別
字串String
在java 中,字串不是基本資料型別,而是String 類的物件,當我們建立一個字串的時候,真的是要使用new 來呼叫String 建構函式
String str = new String();
但是如果僅僅想建立一個字串物件的話,完全可以使用字面量的方法,字面量還是使用雙引號
String str = “abc”;
這裡要注意的一點是,在Java中字串字面量是共享的。當我們使用字面量的方式建立字串物件的時,java在記憶體中會開闢一個字串緩衝區,也可以理解為字串常量池。當我們真正建立字串物件時,如這裡的”abc” ,它就會到字串常量池中查詢這個物件有沒有存在,如果沒有,它就會新建這個物件, 然後把這個物件的地址引用賦值給我們宣告的變數str。這時我們再宣告一個變數,
String anotherString = “abc” ;
它又會到字串常量池中尋找“abc”,這時候發現”abc” 這個物件已經存在,那它直接把常量池中存在的物件的地址賦值給宣告的變數anotherString. 這就是字串共享。
由於java 中的字串是物件,這也引出了一個判斷兩個字串變數相等性的問題,如果使用==進行判斷,那麼判斷的是這兩個變數所引用的物件的地址,而不是這兩個字串變數所持有的內容,一般情況下,這不是我們想要的。大多數情況下,只想判斷兩個字串持有的內空是否相同,那要使用字串中的方法,equals(), 如果內容相同,返回true, 如果內容不同,返回false
str.equals(anotherString); // true
陣列
java是強型別語言,對於陣列來說,這就意味著一個數組中只能儲存相同的資料型別的內容,所以陣列宣告時,要指定其要儲存的資料型別,同時還要指定儲存的最大數量,儲存的最大數量一旦宣告就不會再改變。那陣列怎麼進行宣告呢?我們都知道,宣告一個變數,使用的是資料型別加變數名,如 int num, 就聲明瞭一個int 型別的num變數,但它只能儲存一個數據。如果在int 型別的後面加一個[] 呢,就表示可以存多個數據了,就是陣列了。
int[] numbers = newint[10];
int[] 就是一個型別,宣告陣列的專用型別,想要宣告其它型別的陣列,就把前面的型別改為其它型別就好了,String[] str = new String[10], 儲存字串的陣列。陣列的使用,基本都是一樣的,都是基於索引
numbers[0] = 10; // 賦值
當然宣告陣列變數的時候,還可以初始化。它這裡用的是{} 進行的初始化
int[] numbers = {2,5};
這裡還要注意java陣列元素的預設值,在java中,只要聲明瞭陣列,陣列中元素都會有預設值。對於數值型陣列,它的預設值是0;對於Boolean型陣列,它的預設值是false. 對於物件型陣列,它的預設值是null, 這裡指的是陣列中的每個元素的預設值。在 java中字串是物件,所以一個字串物件陣列,它裡面中的所有元素的預設值為null。