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 is AB,B 请告诉我为什么 b 的值不变。

4

3 回答 3

1

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

于 2013-08-27T12:47:29.307 回答
0

在方法操作的参数中传递 StringBuffer 是passbyvalue。在这种类型中,变量的值只是复制到方法参数中定义的临时变量中。在您的示例中, a 和 b 的值都被复制到xand中y。这里的值a改变了,但b没有。
很明显。这里的值b没有改变,因为yb. 但append功能适用于实际价值。它引用x并附加了y它,最终它显示了变化a

于 2013-08-27T12:48:50.770 回答
0

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

于 2013-08-27T12:50:15.110 回答