一、局部變數和成員變數
1、局部變數,一般是指在方法體內部定義的變數,其範圍是在方法塊內部有效。局部變數必須先初始化,才能使用,否則程式無法編譯。
2、成員變數,是指在類中定義的變數,也就是屬性,其範圍是在整個類中有效。成員變數在定義時可以不指定初始值,系統可以按預設原則初始化。初始化的具體原則如所示:
成員變數預設初始值
| 成員變數類型 |
預設初始值 |
| Byte |
0 |
| Short |
0 |
| Int |
0 |
| Long |
0L |
| Boolean |
false |
| Float |
0.0f |
| Double |
0.0d |
| Char |
'\u0000' |
| 其他類型(參考型別) |
null |
| |
|
3、二者的區別:
(1)、public、protected、private、static等修飾符可用於修飾成員變數,但不能修飾局部變數。兩者都可以使用final修飾。
(2)、成員變數儲存在堆記憶體中,局部變數儲存在棧記憶體中。
(3)、範圍不同,成員變數在整個類中有效,局部變數在方法體中有效,在方法體之外不可見。
(4)、成員變數可以預設初始化,局部變數必須顯示初始化。
二、“+”操作符在Java內部是如何?字串串連的。
Java不支援運算子多載,但在java內部提供了一些特殊運算子,它們具有重載的特徵。例如“+”在實現字串串連時,運算元可以是兩個字串,也可以是一個字串和一個其他類型。請看如下的一個例子:
String a = "a";String b = "b";String c = a + b;String d = c + 1;// 將上述代碼編譯後再反編譯,結果如下String a = "a";String b = "b";String c = (new StringBuilder(String.valueOf(a))).append(b).toString();String d = (new StringBuilder(String.valueOf(c))).append(1).toString();
從上述代碼不難發現,“+”在實現字串串連過程中,實際上是藉助了StringBuilder類及其append()方法。
String類代表大小固定的字串,一旦聲明定義後,內容和大小將不可改變。String類中提供的所有字串操作方法,都是操作結果建立了一個新的String對象並返回。
為了考慮效率問題,在底層Java採用了StringBuilder類,該類代表大小可變的字串,利用StringBuilder類的append()和insert()方法可以在原字串基礎上修改。append()和insert()方法被重載過多次,可以接收多種類型的參數。
三、變數之間傳值時可分為值傳遞和引用傳遞,那麼它們有何區別。
1、儲存機制。
簡單類型變數是直接在棧記憶體中開闢儲存空間儲存變數值。
參考型別變數是由引用空間和儲存空間兩部分構成,引用空間在棧記憶體中,儲存空間在堆記憶體中,儲存空間負責儲存變數值,引用空間負責存放儲存空間的首地址。引用變數中存放的是地址值,通過地址值可以定義儲存位置並修改儲存資訊。
2、變數傳遞。
當變數與變數之間賦值時,參考型別變數和簡單變數都屬於值傳遞,不同的是簡單變數傳遞的是內容本身,而引用變數傳遞的卻是引用地址。