2013-08-27 6 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 is AB, B Пожалуйста, скажите, почему значение b не изменилось.Поведение StringBuffer

+7

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

ответ

1

Вы передаете значения переменных x и y, а не ссылку на них. Таким образом, изменения, сделанные внутри функции управления, бесполезны, следуйте ссылке, предоставленной в качестве комментария к вашему сообщению, чтобы лучше понять;)

0

Передача StringBuffer в параметре работы метода - passbyvalue. В этом типе значение переменной просто копируется в временную переменную, определенную в параметре метода. Значения в вашем примере значения a и b просто копируются в x и y. Здесь значение a было изменено, но b не было.
Это очевидно. Здесь значение b не изменилось, потому что y является зеркальной копией b. Но функция append работает с фактическим значением. Он принимает значение x и присоединяет к нему y, и в итоге он показывает изменение на a.

0

Это потому, что аргументы Java передаются по значению. Таким образом, y = x просто изменяет локальное значение var y в методе работы.

Смежные вопросы