返回信息流先放代码:
public class Test {
public static void main(String[] args) {
Circle c1 = new Circle(1);
Circle c2 = new Circle(2);
swap1(c1, c2);
System.out.println("after swap1: " + c1.radius + " " + c2.radius);
swap2(c1, c2);
System.out.print("after swap2: " + c1.radius + " " + c2.radius);
swap3(c1, c2);
System.out.print("after swap3: " + c1.radius + " " + c2.radius);
}
private static void swap1(Circle c11, Circle c22) {
Circle temp = c11;
c11 = c22;
c22 = temp;
}
private static void swap2(Circle c11, Circle c22) {
double temp = c11.radius;
c11.radius = c22.radius;
c22.radius = temp;
}
private static void swap3(Circle c11, Circle c22) {
Circle temp = c11;
c11 = c22;
c22 = temp;
c11.radius = 99;
}
}
class Circle {
double radius;
public Circle(double radius) {
this.radius = radius;
}
}
输出结果为:
after swap1: 1.0 2.0
after swap2: 2.0 1.0
对于swap1(Circle c1,Circle c2)这个方法,我的理解如图:
debug了下,貌似理解是对的,但是输出结果却和想的不一样……求大牛解答啊[ema23]
这是一条镜像帖。来源:北邮人论坛 / java / #46281同步于 2015/12/10
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
[更新一下]关于传递引用值的问题
wht
2015/12/10镜像同步69 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
对!
能详细解释下么,什么是副本
如果传递的是副本,那这个方法
private static void swap2(Circle c1, Circle c2) {
double temp = c1.radius;
c1.radius = c2.radius;
c2.radius = temp;
}
传递的也是副本么。。。
【 在 dongqing 的大作中提到: 】
: Daniel liang教材书上的题,以前我也问过,传递的是副本啦!
这个问题简单,一般除了get set方法 和 直接修改对象属性,其他的方式基本都不改变对象里面的属性值,嗯。。我都不用看你这交换方法怎么写的。
是的,只是把副本的引用指向换了下
【 在 wht (【zybd】【lgkk】|谁与争锋|仙剑永恒) 的大作中提到: 】
: 对!
: 能详细解释下么,什么是副本
: ...................
这是直接用c1, c2的引用操作对象的属性,是对原对象的修改;
swap(C c1, C c2);相当于传的的是c1, c2的副本(拷贝的),函数结束时,局部变量就撤销了。
这是我的理解
【 在 wht 的大作中提到: 】
: 对!
: 能详细解释下么,什么是副本
: 如果传递的是副本,那这个方法
: ...................