java方法参数_Java方法参数使用

使用Java工作很长时间了,最近阅读《Java核心技术-卷I(第8版)》时,却总能发现一些自己对Java错误的理解之处,今天要说的是关于Java方法参数使用部分(4.5节)。 小节开篇讲到

Java程序设计语言总是采用值调用。也就是说,方法得到的是所有参数值的一个拷贝,特别是,方法不能修改传递给它的任何参数变量的内容。

下面给出一个例子来说明

int number = 10 ;

System.out.println(number);// 10

triple(number); // 执行三倍操作

System.out.println(number);// 10

暂时不用管triple方法实现是怎样,可以看出方法执行前后,number的值是没有改变的,下面是triple方法的实现

private static final void triple(int x) {

x = 3 * x ;

}

下面用图说明整个过程(网上找到的图都很模糊,这里我自己重新画了一个)

QT5T-EBSQ0DK--EJK7JJL8C.png

具体执行过程:

x被初始化为number的一个拷贝。

x被乘以3后等于30,但此时number本身仍是10。

这个方法结束后,x的生命周期结束,值被丢弃。

这里可以看出,方法不可以改变基本类型参数,而作为引用参数则不同

public class Employee {

private String name ;

private double salary ;

public Employee(String name ,double salary) {

this.name = name ;

this.salary = salary ;

}

public void setSalary(double salary) {

this.salary = salary;

}

public double getSalary() {

return salary;

}

}

通过以下测试可以看出引用对象的值发生了变化

Employee jane = new Employee("jane" ,1000) ;

System.out.println(jane.getSalary());// 1000.0

triple(jane) ;// 工资变更为3倍

System.out.println(jane.getSalary());// 3000.0

下面是triple方法的实现

public static final void triple(Employee e) {

e.setSalary(e.getSalary() * 3);

}

同样用图说明

-CRWL4MU5AUWL-KC--OVLBJ.png

e被初始化为jane的值拷贝,这里是一个对象引用,此时e引用了与jane所引用的实例。

triple方法将e引用实例的的salary变更为3倍。

方法结束后,e被丢弃。但其引用的实例的salary已提高为原来的3倍,而jane仍引用着该实例。

上述是改变对象状态(属性)的方法,但引用本身却无法改变(容易搞错的地方)

Employee jane = new Employee("jane" ,1000) ;

Employee john = new Employee("john" ,1200) ;

// com.zlikun.jee.Employee@578088c0

System.out.println(jane);

// com.zlikun.jee.Employee@37922221

System.out.println(john);

swap(jane, john);

// com.zlikun.jee.Employee@578088c0

System.out.println(jane);

// com.zlikun.jee.Employee@37922221

System.out.println(john);

下面给出swap方法的实现

static void swap(Employee e1 ,Employee e2) {

Employee t = e1 ;

e1 = e2 ;

e2 = t ;

}

通过输出结果可以发现,交换前后,jane、john引用的实例并未发生变化。

以上测试,《Java核心技术-卷I(第8版)》给出的结论是:

一个方法不能修改一个基本数据类型的参数

一个方法可以改变一个对象参数的状态

一个方法不能实现让对象引用一个新的对象

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值