一、圖解Java中String不可變性


這里有一堆例子來說明Java的String的不可變性。

1、聲明一個String

String s = "abcd";


string對象不可變展示1
s 變量保存string對象的引用,下面的箭頭解釋成保存了哪個對象的引用。

 

2、 給一個String 變量賦值為另外一個String 變量。

String s2 = s;


String對象不可變展示2變量s2 保存這相同引用的值,它們都指向了同一對象的值。

 

3、連接String

 

s = s.concat("ef");


變量s 現在保存的是新創建的sting對象的引用。

 

string不可變引用3

總結:
一旦一個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;
}

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com