先看一個(gè)簡(jiǎn)單的例子:
public class Test1 {
public static void operateString(String s) {
s.replace("j", "i");
}
public static void operateStringBuffer(StringBuffer sb) {
sb.append("C");
}
public static void main(String args[]) {
String sa = new String("java");
StringBuffer sba = new StringBuffer("java");
operateString(sa);
operateStringBuffer(sba);
System.out.println(sa);
System.out.println(sba);
}
}
答案很簡(jiǎn)單:
java
javaC
原則:
1.String是不可變對(duì)象:
public final class String extends Object
2.java中只有值傳遞
replace函數(shù)源碼中:
public String replace(char oldChar, char newChar) {
...
return new String(0, len, buf);
}
返回的是另一個(gè)String對(duì)象。
而在上面的operateString方法中,是無(wú)返回值的,新產(chǎn)生的String對(duì)象被丟棄了,而sa仍然指向最初的那個(gè)String對(duì)象。
第二個(gè)例子:
public class Test2 {
public static void operate(StringBuffer x, StringBuffer y) {
x.append(y);
y = x;
}
public static void main(String args[]) {
StringBuffer buffA = new StringBuffer("a");
StringBuffer buffB = new StringBuffer("b");
operate(buffA, buffB);
System.out.println(buffA + "," + buffB);
}
}
答案是:
ab,b
開(kāi)始時(shí)a、x指向同一個(gè)StringBuffer對(duì)象(這里稱它為對(duì)象1),它的值是"a";
b、y指向同一個(gè)StringBuffer對(duì)象,它的值是"b"。
執(zhí)行x.append(y)時(shí),對(duì)象1的值被改變,變?yōu)?ab";
而執(zhí)行y=x時(shí),變量y指向被改變,指向了和x同一個(gè)StringBuffer對(duì)象。但是變量b的指向還是沒(méi)有改變,所以仍然為"b"
posted on 2008-04-08 20:59
EvanLiu 閱讀(1484)
評(píng)論(2) 編輯 收藏 所屬分類:
Java基礎(chǔ)