java:java是按值调用而不是按引用调用

文章解释了Java中方法如何处理基本数据类型和对象参数,指出方法不能直接修改基本类型参数但能改变对象状态。通过实例演示了`tripleSalary`方法和`swap`方法,说明Java是按值调用,不会改变原始变量的引用地址。

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

java是按值调用而不是按引用调用


1、方法不能修改基本数据类型的参数。
2、方法可以改变对象参数的状态
3、方法不能让一个对象参数引用另一个新对象。

public static void tripleSalary(double x){
	x = 3*x;
}

//调用
double percent = 10tripleValue(percent);

上述代码执行完并不会改变percent的值,因为在执行tripleSalary方法时,x实际上是percent的一个副本。方法执行完相当于只改变了副本的值,和原来的percent没有关系。

但是下面代码是可以改变值的

public static void tripleSalary(Employee x){
	x.raiseSalary(200);
}

//调用
Employee harry = new Employee(10);
tripleSalary(harry);

之所以能够改变harry的属性值,是因为x是harry的一个副本,他们两个同时引用同一地址,当执行额raiseSalary(200)方法时,实际上是改变了引用的那个地址里的值,因此harry的属性的值也顺理成章的被改变了。

但是有一点要注意,即便是x是harry副本也不能说是harry将引用传给了x,正确来说是harry将引用的地址作为值,传递给了x。如果是按引用调用,下面的代码应该可以交换两者的值。

public static void swap(Employee x,Employee y){
	Employee temp = x;
	x = y;
	y = temp;
}

//调用
var a = new Employee("ALICE");
var b = new Employee("BOB");
swap(a,b);

实际上,上述代码并不能交换a和b的值,因为方法中的
x和y分别是a和b的副本,方法只是交换了两个副本指向的地址,而没有影响到a和b。
因此,我们可以说,java是按值调用的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值