2013-08-27 37 views
0
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请告诉我为什么b的值不变。StringBuffer行为

+7

http://stackoverflow.com/questions/40480/is-java-pass-by-reference – assylias

回答

1

您正在传递变量x和y的值,而不是对它们的引用。所以在操作函数里面做的更改是没用的,请按照提供的链接作为评论,以便更好地理解您的帖子;)

0

在方法操作参数中传递StringBuffer是passbyvalue。在这种类型中,变量的值只是复制到方法参数中定义的临时变量中。在你的例子中,a和b的值的意思就是复制到xy。这里a的值发生了变化,但b没有发生变化。
其显而易见。这里的值b没有变化,因为yb的镜像副本。但append函数与实际值一起工作。它参考x并附加y它最终它显示在a更改。

0

这是因为在Java中,参数是按值传递的。所以y = x只是改变操作方法中的局部变量值。