StringBuffer作為參數傳遞的問題


public class Foo {
2.   public static void main (String [] args)  {
3.      StringBuffer a = new StringBuffer (“A“);
4.      StringBuffer b = new StringBuffer (“B“);
5.     operate (a,b);
6.     system.out.printIn{a +“ ”+b};
7. )
8. static void operate (StringBuffer x, StringBuffer y)  {
9.           x.append (y);
10.           y = x;
11.     }
12. }

 

打印出來是AB B

因為:AB B
變量a\b\x\y中存儲的是StringBuffer變量的引用而不是一個StringBuffer對象。根據非基本類型參數傳遞為引用傳遞的規則,operate接收的參數只是StringBuffer對象的引用.因此可以理解為x、a都是指向同一個對象;b、y也是指向同一個StringBuffer對象,所以x.append(y)將導致x和a同指的StringBuffer對象改變(增加"B");而y=x只是讓變量y改變指向為和x相同的StringBuffer對象,而y原來所指的對象並不會發生任何改變。

 

所以StringBuffer是引用傳遞傳遞的是地址

而String 雖然也是對象,但其實final類型的所以相當於值傳遞


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM