Java中基本数据类型赋值机制与数组的赋值机制

Java中基本数据类型赋值机制与数组的赋值机制

基本数据类型赋值

首先运行一下以下的代码,注意查看结果,可以发现n2的值并没有随着n1值给便而改变。

这种数据赋值方式为值拷贝!!!!,仅仅将数据的值拷贝走,并没有管理他的地址。

1
2
3
4
5
6
7
8
9
public class Test {
public static void main(String [] args){
int n1=10;
int n2=n1;
n1=80;
System.out.println(n1);
System.out.println(n2);
}
}

image-20220331123443871

jvm内存结构包括栈,堆与方法区。下面来说一下原理,定义n1=10,其结果直接存储在jvm虚拟机的栈中,同样n2=n1,直接找到n1的对应的值,将10传值给n2。所以n1的改变不影响n2。

image-20220331123501223

数组类型的赋值

运行以下代码,数据的赋值类型为地址拷贝(引用赋值),即拷贝的是对应对象的地址。观察运行结果可以发现其两个数组的地址一模一样。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import java.util.Arrays;

public class Test {
public static void main(String [] args){
int []n1={10};
int []n2=n1;
n1[0]=80;
System.out.println(Arrays.toString(n1));
System.out.println(Arrays.toString(n2));
//打印出他们的地址
System.out.println(n1);
System.out.println(n2);
}
}

image-20220331123534717

在数组赋值时候,栈中存放的为响应的地址,这也是为什么直接输出n1的时候是一个地址值,而n2数组取值时候接受到n1对应的地址,所以当n1改变时候,n2也会随着改变,这就是引用赋值。

image-20220331123609262

总结

看到这里学过c语言的小伙伴可以发现,这个其实和c的指针很像,是因为Java把c语言中的指针封装了,在Java中没有指针这一概念的。