开发者社区> 问答> 正文

java 方法传值问题

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却发生对调了?

展开
收起
蛮大人123 2016-05-27 15:46:33 2028 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    传递引用改变的是对象本身,而不是让引用指向两一个对象。
    看下面的代码:

    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;
    }
    2019-07-17 19:18:04
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载