java的值传递机制

本笔记来源于:尚硅谷Java零基础全套视频教程(宋红康2023版,java入门自学必备)
b站视频

1.针对于方法内变量的赋值举例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
System.out.println("***********基本数据类型:****************");
int m = 10;
int n = m;

System.out.println("m = " + m + ", n = " + n);

n = 20;

System.out.println("m = " + m + ", n = " + n);

System.out.println("***********引用数据类型:****************");

Order o1 = new Order();
o1.orderId = 1001;

Order o2 = o1;//赋值以后,o1和o2的地址值相同,都指向了堆空间中同一个对象实体。

System.out.println("o1.orderId = " + o1.orderId + ",o2.orderId = " +o2.orderId);

o2.orderId = 1002;

System.out.println("o1.orderId = " + o1.orderId + ",o2.orderId = " +o2.orderId);

规则:

如果变量是基本数据类型,此时赋值的是变量所保存的数据值。
如果变量是引用数据类型,此时赋值的是变量所保存的数据的地址值。

2.针对于方法的参数概念

形参:方法定义时,声明的小括号内的参数
实参:方法调用时,实际传递给形参的数据

3.java中参数传递机制:值传递

规则:

  • 如果参数是基本数据类型,此时实参赋给形参的是实参真实存储的数据值
  • 如果参数是引用数据类型,此时实参赋给形参的是实参存储数据的地址值

推广:
如果变量是基本数据类型,此时赋值的是变量所保存的数据值
如果变量是引用数据类型,此时赋值的是变量所保存的数据的地址值

注意: Integer属于引用数据类型,其进行值传递的时候是数据的地址值,但是修改之后,你却发现其数据值没有改变,这是为什么呐!!?
答案见此链接: https://blog.csdn.net/SICAUliuy/article/details/88554649

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

public class test{
public void add3(Integer i){
System.out.println("i赋值前的地址:"+System.identityHashCode(i));
i=3;
System.out.println("i赋值后的地址:"+System.identityHashCode(i));

}
@Test
public void test(){
Integer a=5;
System.out.println("a赋值前的地址:"+System.identityHashCode(a));
add3(a);
System.out.println("a赋值前的地址:"+System.identityHashCode(a));
a=10;
System.out.println("a修改值后的地址:"+System.identityHashCode(a));
System.out.println(a);

}

————————————————
版权声明:本文为CSDN博主「站在风口的猪猪侠」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/SICAUliuy/article/details/88554649

结果

1
2
3
4
5
a赋值前的地址:352359770
i赋值前的地址:352359770
i赋值后的地址:243745864
a赋值前的地址:352359770
a修改值后的地址:69978035210

通过测试,返现Integer每次改变值,都回发生地址的变化。

还需要注意的一点是:
在Integer源码中,int值是final修饰的,不可以改变

1
class Integer{final int value; //一旦赋值,就不能改变。}

4.典型例题与内存解析:

【例题1】

【例题2】


java的值传递机制
http://yuanql.top/2023/01/04/03_java基础编程/04_面向对象上/java的值传递机制/
作者
Qingli Yuan
发布于
2023年1月4日
许可协议