一:数据类型
- 基本数据类型 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]