java中String、StringBuffer、StringBuilder
1、String類是final類,即String類不能被繼承,並且它的成員方法都默認為final方法。
2、對String對象的任何改變都不影響到原對象,相關的任何change操作都會生成新的對象。
3、String str="hello world" 和 String str=new String("hello world")
在JVM內存機制中,class文件中有一部分,來存儲編譯期間生成的字面常量以及符號引用,這部分叫做class文件常量池,在運行期間對應著方法區的運行時常量池。所以在上述代碼中,都在編譯期間生成了字面常量和符號引用,運行期間字面常量“hello world”被存儲在運行時常量池。通過這種方式來將String對象跟引用綁定的話,JVM執行引擎會現在運行時常量池查找是否存在相同的字面常量,若存在,則直接將引用指向已經存在的字面常量,否則在運行時常量池開辟一個空間來存儲該字面常量,並將引用指向該字面常量。而通過new關鍵字來生成對象是在堆區進行的,而在堆區進行對象生成的過程是不會去檢測該對象是否已經存在的。因此通過new來創建對象,創建出的一定是不同的對象,即使字符串的內容是相同的。
4、String Builder和String Buffer類擁有的成員屬性以及成員方法基本相同,區別就是String Buffer類的成員發放前面多了一個關鍵字:synchronized,即在多線程訪問時起到安全保護作用,String Buffer是線程安全的。
5、String、String Buffer、String Builder三者的執行效率:String Builder > String Buffer > String(相對而言)
三個類各有利弊,根據具體情況選擇使用。當字符串相加操作或者改動較少的情況下,建議使用String str =“hello”這種;當字符串操作較多的情況下,建議使用String Builder;若采用了多線程,則使用String Buffer。
java中String、StringBuffer、StringBuilder