java reference 传引用_Java是“通过引用传递”还是“传递价值”?

为了显示对比,请比较以下C ++和Java代码段:

在C ++中:注意:错误的代码 - 内存泄漏! 但它证明了这一点。void cppMethod(int val, int &ref, Dog obj, Dog &objRef, Dog *objPtr, Dog *&objPtrRef){

val = 7; // Modifies the copy

ref = 7; // Modifies the original variable

obj.SetName("obj"); // Modifies the copy of Dog passed

objRef.SetName("objRef"); // Modifies the original Dog passed

objPtr->SetName("objPtr"); // Modifies the original Dog pointed to

// by the copy of the pointer passed.

objPtr = new Dog("newObjPtr");  // Modifies the copy of the pointer,

// leaving the original object alone.

objPtrRef->SetName("objRefPtr"); // Modifies the original Dog pointed to

// by the original pointer passed.

objPtrRef = new Dog("newObjPtrRef"); // Modifies the original pointer passed}int main(){

int a = 0;

int b = 0;

Dog d0 = Dog("d0");

Dog d1 = Dog("d1");

Dog *d2 = new Dog("d2");

Dog *d3 = new Dog("d3");

cppMethod(a, b, d0, d1, d2, d3);

// a is still set to 0

// b is now set to 7

// d0 still have name "d0"

// d1 now has name "objRef"

// d2 now has name "objPtr"

// d3 now has name "newObjPtrRef"}

在Java中public static void javaMethod(int val, Dog objPtr){

val = 7; // Modifies the copy

objPtr.SetName("objPtr") // Modifies the original Dog pointed to

// by the copy of the pointer passed.

objPtr = new Dog("newObjPtr");  // Modifies the copy of the pointer,

// leaving the original object alone.}public static void main(){

int a = 0;

Dog d0 = new Dog("d0");

javaMethod(a, d0);

// a is still set to 0

// d0 now has name "objPtr"}

Java只有两种类型的传递:内置类型的值,以及对象类型的指针值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值