Java与C++参数传递方式对比

1 Java

Java中方法(函数)的参数传递只有按值调用一种方式。只是在方法内部产生了一个参数的拷贝。

方法参数分为两种:

1.基本数据类型。方法无法修改参数的值。

2.对象引用。假设一个类Employee有一个raiseSalary的方法,在tripleSalary函数中调用该方法。

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

harry = new Employee(...);
tripleSalary(harry);

 在函数内部会将x初始化为harry值的拷贝,此时harry和x都指向了那个Employee对象,当使用raiseSalary方法时,对象也会产生改变。

但是需要注意的是,这个拷贝指向的是原对象,产生的操作也是针对原对象的,类似于C语言中传入一个指针,通过指针操作其指向的对象。而根据指针只能找到指针指向的内容,不能改变指针;同样,根据这个拷贝也只能找到它引用的对象,不能改变原参数使其引用一个新的对象。 

如果在方法(函数内部)改变了拷贝指向的对象,在离开函数时,由于是传值调用,并不会对原来的对象引用产生任何影响。

定义一个交换对象的方法:

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

Employee a = new Employee("Alice",...);
Employee b = new Employee("Bob",...);
swap(a,b);

这个方法只能交换拷贝x和y,不能改变存储在变量a和b中的对象引用,在方法返回后,x和y也被丢弃了,不会产生任何影响。

 2 C++

引用(reference)为对象起了另外一个名字,引用类型引用(refers to)另外一种类型。

通过将声明符写成&d的形式来定义引用类型,其中d是声明的变量名

 C++中除了按值传递,还有一种按引用传递的方式。传入函数的形参相当于是对象的别名,在函数中的操作和对原对象的操作是等同的。通过这种方式可以轻松实现swap的功能:

void swap(T &a, T &b){
    T temp = a;
    a = b;
    b = temp;
}

参考

《Java核心技术 卷1》

《C++ primer 中文版 第5版》

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值