Posted on 2011-05-03 16:44
哈希 閱讀(275)
評論(0) 編輯 收藏 所屬分類:
java 代碼
public class StringBufferTest
{
public void operater(StringBuffer x,StringBuffer y)
{
//string.append(String)字符串添加函數(shù)
x.append(y);
y=x;
System.out.println("operater輸出:"+"a="+x+",b="+y);
}
public static void main(String [] args)
{
StringBuffer a=new StringBuffer("A");
StringBuffer b=new StringBuffer("B");
StringBufferTest test=new StringBufferTest();
test.operater(a, b);
System.out.println("main輸出:a="+a + ",b=" +b);
}
java的引用類型是地址傳遞,可是在operater中和main中輸出結(jié)果為什么不一樣呢?
在main中
a => new StringBuffer("A");
b => new StringBuffer("B");
在test.operater(a, b);這句,傳入的是兩個引用
在operater方法中,b被重新賦值了,即引用地址改變了
================
補充一下:java中任何一個對象變量只是指向創(chuàng)建的對象的一個引用
例如 String a = "KKK"; 那么 “KKK”是創(chuàng)建的String對象, a 則是這個對象的引用,或者說a保存對象“KKK”在內(nèi)存中的地址
“==”與“Equals”區(qū)別
==操作比較的是兩個變量的值是否相等,對于引用型變量表示的是兩個變量在堆中存儲的地址是否相同,即棧中的內(nèi)容是否相同。
equals操作表示的兩個變量是否是對同一個對象的引用,即堆中的內(nèi)容是否相同。
==比較的是2個對象的地址,而equals比較的是2個對象的內(nèi)容。
顯然,當(dāng)equals為true時,==不一定為true;