对Java中值传递与引用传递的理解

本文通过初级、中级和高级三个阶段的比喻,探讨了Java中值传递与引用传递的区别。初级阶段以基本数据类型为例,说明其传递的是值而非地址;中级阶段以String类型为例,展示其作为对象却无法完全改变另一变量的特性;高级阶段以自定义类为例,展示了引用传递的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Java中值传递与引用传递一直是争议挺大的,一方说没有引用传递,一方说值传递传递实际值,而引用传递传递地址。下面我来以一种“进化”的方式说说我的理解。
假设一般的类型的传递称为是“初级”,String类型的传递是“中级”,而其它类型(都是类)的传递是“高级”,下面以一个几个例子来解释为何如此称呼。
例:
public static void main(String [] asd){


int a = 10;

int b = a;

a = 100;


System.out.println(a,b);


}

输出的是100,10。
[color=red]以原本的说法是跟着变量一起存储的是实际值,而后进行的是实际值的传递。
而以我的观点认为跟着变量一起存储的是地址,而后进行的是地址的传递,只是它是“初级”的,因此不具备一个变量的改变影响另一个变量。[/color]
例:
public static void main(String [] asd){

String s = "a";

String s1 = s;

s = "b";

System.out.println(s,s1);

}

输出的值是a,b
[color=red]而原来的说法在这里的争议最大,因此有人说Java中没有引用传递。
而以我看来String类型是介于“初级”与“高级”的过渡期,称为“中级”,即进化还不完全,从输出值中可以看出它与“初级”的类似处,但String本身是一个类,但还没完全具备“高级”的功能,因此称为“中级”。[/color]
例:
public static void main(String [] asd){

Student stu = new Student();

stu.getName("张三");

Student stu2 = stu1;

stu.getName("李四");

System.out.println(stu,stu2);

}
输出的值为李四,李四
[color=red]我在此处的理解与原来的说法相同,传递的是地址,这是“高级”具备的功能,即一个变量的改变影响另一个变量。[/color]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值