java 根据参数改变状态_java中方法可以修改对象引用作为参数的状态。这句话如何理解?...

2010-01-13 回答

就是引用对象传参,传到函数里边你在函数里修改它,实参也会变

比如数组是引用对象吧

void foo(int[] a)有这么一个函数,你在函数体里a[0] = 3;

然后其他地方调用foo

int[] a = new int[]{1,2,3,4};

foo(a);

// 到这里结果a[0]就变成3了

你例子里的x和harry你可以看作是一个指代,它们两指向同一快内存,在函数里x修改了它指向的地方,也就相当于harry指向的地方被修改了

下面->表示指向,比如a->xxx,a指向xxx这块内存

a -> Employee(A)

b -> Employee(B)

传参到swap里

a = x -> Employee(A)

b = y -> Employee(B)

swap结束时

b = x -> Employee(B)

a = y -> Employee(A)

也就是说,swap只是交换x和y的引用,它们两引用的对象被交换了,然后x和y是swap内部的局部变量,函数结束就over了

对调用者传入的a和b没有实质上的改变

追问:

关于java方法的参数中,是只调用还有对象调用还有一个例子,确实不太明白:

public static void swap(Employee x,Employee y)

{

Employee temp = x;

x = y;

y = temp;

}

用以下进行调用:

Employee a = new Employee();

Employee b= new Employee();

swap(a,b);

书上的解释是:如果采用的是引用调用的话,这个程序应该可以执行,但是方法并没有改变储存在a和b中的对象引用(为什么?),swap方法的参数x,y被初始化两个对象引用的拷贝,这个方法交换的是两个拷贝(这个我当然理解,然后呢?),方法结束后,x,y被丢弃了,a,b仍然引用方法调用之前所引用的对象,(为什么?为什么?)我确实没有看懂?请教各位啦...

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值