中易网

Java值传递

答案:2  悬赏:40  
解决时间 2021-11-08 20:45
  • 提问者网友:一人心
  • 2021-11-08 05:46
package adsads;

public class adfsa
{ public static void main(String[] args)
{
Circle circle1=new Circle(1);
Circle circle2=new Circle(2);
System.out.println("Before swap1 :circle1= "+circle1.radius+"circle2="+circle2.radius);
swap1(circle1,circle2);
System.out.println("After swap1 :circle1= "+circle1.radius+"circle2="+circle2.radius);
swap2(circle1,circle2);
System.out.println("After swap2:circle2:circle1= "+circle1.radius+"circle2="+circle2.radius);

}
public static void swap1(Circle x,Circle y){
Circle temp=x;
x=y;
y=temp;
}
public static void swap2(Circle x,Circle y){
double temp=x.radius;
x.radius=y.radius;
y.radius=temp;
}
}
class Circle{
double radius;
Circle(double newRadius){
radius=newRadius;
}
}
结果是Before swap1 :circle1= 1.0circle2=2.0
After swap1 :circle1= 1.0circle2=2.0
After swap2:circle2:circle1= 2.0circle2=1.0
求能够解释swap1中为啥是这个结果……不太能理解。
最佳答案
  • 二级知识专家网友:不傲怎称霸
  • 2021-11-08 06:22
调用swap1前,circle1保存了一个Circle对象的引用(就是一个地址,假设为1),circle2保存了另一个Circle对象的引用(也是一个地址,假设为2)。当调用swap1时传递的是引用(即传递的是地址,相当于C语言的传址),因此x=1,y=2。交换x和y后x=2,y=1,但此时并没有改变circle1和circle2的值,circle1保存的还是第一个Circle对象的地址1,而Circle2保存的也还是另一个Circle对象的地址2,所以才有这样的输出。
全部回答
  • 1楼网友:虚伪的现实
  • 2021-11-08 06:56
默认情况下是引用传递 ojbecta a1 = new objecta(); ojbecta a2 = a1; 引用传递时,对a2操作相当与对a1操作 也就是说:a2 与a1 是同一个对象的两个不同的名字 而在值传递时,a2会另外分一个与a1不同的空间 对任何一个对象操作都不影响到对方 这跟指针式差不多的,说白啦值传递是值本身变化,而引用传递就是指针的变化
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息