java传值传引用_java传值与传引用总结

基本数据类型

public class ParamTest {

public static void main(String[] arge) {

double percent = 10;

System.out.println("Testing tripleValue:");

System.out.println("Before: percent="+ percent);

tripleValue(percent);

System.out.println("After: percent=" +percent);

}

public static void tripleValue(double x){

x = x * 3;

System.out.println("End of method x=" + x);

}

}

运行结果是

Testing tripleValue:

Before: percent=10.0

End of method x=30.0

After: percent=10.0

我们可以发现percent的值没有改变,下面看一下具体的执行过程

x被初始化为percent值的一个拷贝

x乘以3变成30,此时percent仍然是10

方法结束,参数x不再使用

我们可以得出一个结论就是一个方法不能修改一个基本数据类型的参数

对象参数

public class ParamTest {

public static void main(String[] arge) {

System.out.println("Testing tripleSalary:");

Employee harry = new Employee("Harry", 50000);

System.out.println("Before: salary=" + harry.getSalary());

tripleSalary(harry);

System.out.println("After: salary=" + harry.getSalary());

}

public static void tripleSalary(Employee x){

x.raiseSalary(200);

System.out.println("End of method: salary=" + x.getSalary());

}

}

class Employee{

private String name;

private double salary;

public Employee(String n,double s){

name = n;

salary = s;

}

public String getName() {

return name;

}

public double getSalary() {

return salary;

}

public void raiseSalary(double byPercent){

double raise = salary * byPercent / 100;

salary += raise;

}

}

运行结果

Testing tripleSalary:

Before: salary=50000.0

End of method: salary=150000.0

After: salary=150000.0

我们可以发现salary数值发生了改变,下面看一下执行过程

x被初始化为harry值的拷贝,这里是一个对象引用

调用raiseSalary方法,x和harry变成150000

方法结束后,参数x不再使用

45c205107a62276c918cf9ab7ae5376b.png

我们可以得出一个结论就是一个方法可以改变一个对象参数的状态

对象引用

public class ParamTest {

public static void main(String[] arge) {

System.out.println("Testing swap:");

Employee a = new Employee("Alice",70000);

Employee b = new Employee("Bob",60000);

System.out.println("Before: a="+ a.getName());

System.out.println("Before: b="+ b.getName());

swap(a,b);

System.out.println("After: a=" + a.getName());

System.out.println("After: b=" + b.getName());

}

public static void swap(Employee x,Employee y){

Employee temp = x;

x = y;

y = temp;

System.out.println("End of method: x=" + x.getName());

System.out.println("End of method: y=" + y.getName());

}

}

运行结果是

Testing swap:

Before: a=Alice

Before: b=Bob

End of method: x=Bob

End of method: y=Alice

After: a=Alice

After: b=Bob

87f88b70be8c9ade09411e3d640a8f5e.png

我们可以得出一个结论就是一个方法不能让对象参数引用一个新的对象

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值