一:數據類型
- 基本數據類型 byte,short, int,long, float,doble,boolean,char
- 引用數據類型,即除了基本的變量類型之外的所有類型
二:java在內存中堆、棧兩塊存儲空間
image.png
2.1 基本數據類型只有一塊存儲空間(分配在stack中)
- 傳遞的時候直接是值傳遞
- 對數據進行操作,不影響原先的值
代碼示例:
package chapter3;
public class MemoryDemo {
public static void main(String[] args) {
int i = 1;
System.out.println("第一個i:" + i);
int a = i;
System.out.println("第二個i:" + i);
System.out.println("第二個a:" + a);
i = 2;
System.out.println("第三個a:" + a);
System.out.println("第三個i:" + i);
}
}
輸出結果:
第一個i:1
第二個i:1
第二個a:1
第三個a:1
第三個i:2
2.2 引用類型有兩塊存儲空間(一塊在stack中,一塊在heap中)
- 一個對象在內存中會請求一塊空間來保存數據,訪問對象的時候不會直接是訪問對象在內存中的數據,而是通過引用去訪問
- 引用:也是一種數據類型,保存的是內存的地址,引用是存儲在 stack棧空間里面
- 不同的引用可以指向同一個對象,一個對象可以有多個引用
代碼示例:
package chapter3;
public class MemoryDemo {
public static void main(String[] args) {
String aa = "這是aa";
String bb = "這是bb";
System.out.println("第一個aa:" + aa);
System.out.println("第一個bb:" + bb);
bb = aa;
System.out.println("第二個aa:" + aa);
System.out.println("第二個bb:" + bb);
aa = "重新賦值,查看結果";
System.out.println("第三個aa:" + aa);
System.out.println("第三個bb:" + bb);
}
}
運行結果:
第一個aa:這是aa
第一個bb:這是bb
第二個aa:這是aa
第二個bb:這是aa
第三個aa:重新賦值,查看結果
第三個bb:這是aa
三:數組拷貝
代碼示例
package chapter3;
import java.util.Arrays;
public class MemoryDemo {
public static void main(String[] args) {
int [] a = {1,2,3};
int [] b = a;
System.out.println("a的地址是:"+a);
System.out.println("b的地址是:"+b);
System.out.println(Arrays.toString(a));
System.out.println(Arrays.toString(b));
b[0] = 0;
System.out.println(Arrays.toString(a));
System.out.println(Arrays.toString(b));
}
}
輸出結果:
a的地址是:[I@a09ee92
b的地址是:[I@a09ee92
[1, 2, 3]
[1, 2, 3]
[0, 2, 3]
[0, 2, 3]