重新認識基本類型的變數 變數的基本邏輯——有定才有變。在人看來,固定的是名字,變化的是名字對應的值。對電腦來說,固定的是地址,變化的是它的值。 理解電腦如何使用記憶體來完成變數的功能的: 記憶體就像一堆白紙,只能通過頁碼編號進行訪問,也就是所謂的記憶體地址。 變數就是使用一個固定地址加上這個地址對應的 ...
重新認識基本類型的變數
- 變數的基本邏輯——有定才有變。在人看來,固定的是名字,變化的是名字對應的值。對電腦來說,固定的是地址,變化的是它的值。
- 理解電腦如何使用記憶體來完成變數的功能的:
- 記憶體就像一堆白紙,只能通過頁碼編號進行訪問,也就是所謂的記憶體地址。
- 變數就是使用一個固定地址加上這個地址對應的記憶體。電腦通過地址讀寫地址對應的記憶體的值,完成變數的賦值和訪問值的功能。就好像根據頁碼編號,在指定的白紙上寫字或者擦掉重寫。
- 變數的名就是地址,變數的實就是地址的記憶體上保留的值。
理解數組的名與實
- 數組的“實”是一塊地址連續的記憶體,就像是編號連續的一沓白紙。
- 數組的名,就是這塊連續記憶體的地址。
- 數組的變數和基本變數一樣,本身就是一個地址。但是與基本變數不一樣的是,這個地址的值,是數組的“名”,也就是數組的第一個地址。
數組 = 數組變數 + 數組實體
- 數組變數[索引] 就是在數組原有地址的基礎上,加上索引,獲得想要的元素。
- 因此索引值從0開始,這是因為數組變數的地址就是數組第一個元素的地址。
- 另外,實際上0代表對原來位置的0個偏移量,因此也就不難理解為什麼數組下標從0開始了。
數組的長度
- 數組變數.length 可以獲取到數組的長度
- 數組創建後,長度不可以改變
public class WhatIsArray { public static void main(String[] args) { int[] book = new int[10]; System.out.println(book[0]); // 訪問數組的第一位 System.out.println(book[1]); // 訪問數組的第二位 System.out.println("數組的長度是:" + book.length); // 查詢數組的長度 } }
數組索引越界和初始值
- 訪問數組越界會出錯,這種錯誤叫做 IndexOutOfBoundException
- 如果沒有把握數組是否會越界,可以把索引和數組長度做比較。註意索引是從0開始的。
- 數組內每個元素都有初始值,初始值與數組的類型有關係。對於數字類型,初始值為0,對於boolean類型初始值為false。
public class IndexOutOfBoundExample { public static void main(String[] args) { int[] array = new int[5]; System.out.println(array[array.length-1]); System.out.println(array[array.length]); // array[5] 這樣就會越界 } }
讓變數指向新的數組
- 數組變數可以指向新的數組實體。這時候,數值變數的值就是新的數組實體的地址了。這種數組變數的賦值操作, 叫做讓變數指向新的數組。
- 如果沒有別的數組變數指向原來的數組實體,那麼原來的數組實體就再也不可訪問了,好像“消失”了一樣。
public class AssignArray { public static void main(String[] args) { int[] book = new int[3]; book[0] = 9; System.out.println("book長度為" + book.length + "。book[0] = " + book[0]); book = new int[32]; System.out.println("book長度為" + book.length + "。book[0] = " + book[0]); } }