public class Test {
public static void main (String [] args) {
TestMathRandom x = new Test();
StringBuffer a = new StringBuffer ("A");
StringBuffer b = new StringBuffer ("B");
x.operate (a,b);
System.out.println(a + "," +b);
}
void operate (StringBuffer x, StringBuffer y) {
x.append(y);
y = x;
}
}Ans是AB,请告诉我为什么b的值是不变的。
发布于 2013-08-27 20:47:29
您传递的是变量x和y的值,而不是对它们的引用。因此,在操作函数中所做的更改是无用的,请访问作为评论提供给您的帖子的链接以更好地理解;)
发布于 2013-08-27 20:48:51
在方法操作的参数中传入StringBuffer为passbyvalue。在此类型中,变量的值被复制到方法的参数中定义的临时变量中。在您的示例中,a和b的值只是复制到x和y中。在这里,a的值发生了变化,但b没有。
这很明显。这里b的值没有改变,因为y是b的镜像副本。但append函数使用的是实际值。它引用x并将其附加到y中,最终在a中显示更改。
发布于 2013-08-27 20:50:15
这是因为在Java中,参数是通过值传递的。所以y=x只是改变了operate方法中的局部变量值。
https://stackoverflow.com/questions/18465684
复制相似问题