java中只有一种参数传递的方式(值传递)。
当传递剧本数据类型时,传递的是实参的值。
传递引用类型的参数时,传递的是对象的引用。
问题:以下代码就不明白了。- public class Test {
- public static void main(String[] args) {
- Circle c1 = new Circle(1);
- Circle c2 = new Circle(2);
-
- // 交换前c1和c2的radius的值
- System.out.println("c1.radius = " + c1.radius + " 、c2.radius = " + c2.radius);
- // 第一次交换后c1和c2的radius的值
- swap1(c1, c2);
- System.out.println("swap1: c1.radius = " + c1.radius + " 、c2.radius = " + c2.radius);
- // 第二次交换后c1和c2的radius的值
- swap2(c1, c2);
- System.out.println("swap2: c1.radius = " + c1.radius + " 、c2.radius = " + c2.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;
- }
- }
复制代码 执行的结果是:- c1.radius = 1.0 、c2.radius = 2.0
- swap1: c1.radius = 1.0 、c2.radius = 2.0
- swap2: c1.radius = 2.0 、c2.radius = 1.0
复制代码 不太明白的就是。在swap1后,两个对象的引用变量都交换了。那调用对象的属性也应该和之前不一样了。
我不太明白为啥会是这个结果呢。
希望有人解答,先谢谢了。
|