为啥第一次交换尝试有效,但第二次无效? [复制]
Posted
技术标签:
【中文标题】为啥第一次交换尝试有效,但第二次无效? [复制]【英文标题】:Why the first swap attempt works, but the second doesn't work? [duplicate]为什么第一次交换尝试有效,但第二次无效? [复制] 【发布时间】:2019-04-13 19:44:30 【问题描述】:package main;
public class Main
double radius;
public Main(double newRadius)
radius = newRadius;
public static void main (String [] args)
Main x = new Main(1);
Main y = new Main(2);
Main temp;
// try to swap first time
temp = x;
x = y;
y = temp;
System.out.println(x.radius + " " + y.radius);
x = new Main(1);
y = new Main(2);
// try to swap second time
swap(x, y);
System.out.println(x.radius + " " + y.radius);
public static void swap(Main x, Main y)
Main temp = x;
x = y;
y = temp;
为什么第一次有效,第二次无效?第一个做了交换,但第二个没有。我正在传递对函数的引用。为什么这不起作用?
【问题讨论】:
引用按值传递。方法内部的变量不是方法外部的变量,因此重新分配它们不会改变外部变量。见Is Java pass-by-reference or pass-by-value? 【参考方案1】:您误解了如何传递引用,您创建了一个交换引用的范围,然后该范围结束。
尝试将字段的值存储在变量中,例如temp = x.radius 然后赋值给 y.radius。
之所以第一次起作用,是因为作用域是一样的。
【讨论】:
以上是关于为啥第一次交换尝试有效,但第二次无效? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
fread()函数第一次读取成功,但第二次读取失败,为啥为啥为啥,
solr同一个条件查询,为啥第一次能查询出来,第二次却查询不出来,但第三次又能查询出来了这是为啥?