java 方法传值问题,请大家帮忙看看指点指,代码如下:
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.println("After swap2:"+c1.radius+c2.radius);
}
public static void swap1(Circle x,Circle y){
Circle t = x;
x = y;
y = t;
}
public static void swap2(Circle x,Circle y){
double k = x.radius;
x.radius = y.radius;
y.radius = k;
}
}
class Circle{
double radius;
Circle(double newRadius){
radius = newRadius;
}
}
不是说传递基本数据类型的参数时:方法内的参数变化不影响方法外的参数。而传递引用数据类型的参数时,是传递共享,参数会发生变化吗?为什么这里的swap1没发生变化而swap2却发生对调了?
传递引用改变的是对象本身,而不是让引用指向两一个对象。
看下面的代码:
class A
{
public int x;
public int y;
}
正确写法如下
void swap(A a)
{
int t = a.x;
a.x = y; //改变对象的字段
a.y=t;
}
错误写法
void swap(A a)
{
int x = a.x;
int y = a.y;
a = new A(); //让a指向另一个对象
a.x = y;
a.y = x;
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。