這裡有一堆例子來說明Java的String的不可變性。
1、聲明一個String
String s = "abcd";
s 變量保存string對象的引用,下面的箭頭解釋成保存了哪個對象的引用。
2、 給一個String 變量賦值為另外一個String 變量。
String s2 = s;
String對象不可變展示2變量s2 保存這相同引用的值,它們都指向了同一對象的值。
3、連接String
s = s.concat("ef");
變量s 現在保存的是新創建的sting對象的引用。
總結:
一旦一個string 被在內存(堆)中創建,它就是不可以被改變的。我們應該注意的是所有的String方法都不會改變一個string的本身,而是返回一個新的string。
如果我們需要一個可以被改變的string,那麼我們可以使用StringBuffer(譯者注:線程安全)或StringBuilder。否則每創建一個新的string的時候,會浪費大量的時間在垃圾收集上。
這裡有個StringBuilder的應用例子。
public static String readFileToString() throws IOException {
File dirs = new File(".");
String filePath = dirs.getCanonicalPath() + File.separator+"src"+File.separator+"TestRead.java";
StringBuilder fileData = new StringBuilder(1000);//Constructs a string buffer with no characters in it and the specified initial capacity
BufferedReader reader = new BufferedReader(new FileReader(filePath));
char[] buf = new char[1024];
int numRead = 0;
while ((numRead = reader.read(buf)) != -1) {
String readData = String.valueOf(buf, 0, numRead);
fileData.append(readData);
buf = new char[1024];
}
reader.close();
String returnStr = fileData.toString();
System.out.println(returnStr);
return returnStr;
}