一、java內部string類的實現:
java 8:
1
2
3
4
5
|
public final class string implements java.io.serializable, comparable<string>, charsequence { /** the value is used for character storage. */ private final char value[]; } |
java 9 及之后:(使用coder標識了編碼)
1
2
3
4
5
6
7
8
9
|
public final class string implements java.io.serializable, comparable<string>, charsequence { /** the value is used for character storage. */ private final byte [] value; /** the identifier of the encoding used to encode the bytes in {@code value}. */ private final byte coder; } |
二、為何要將string定義為final不可變?
因為在程序編寫的過程中,會大量地用到string常量,如果每次聲明一個string引用都要新建一個string對象,那么會造成空間的極大浪費。于是,在java的堆中開辟了一塊存儲空間string pool,用于存儲string常量對象。當有多個string引用指向同樣的string字符串時,實際上是指向的是同一個sting pool中的對象,而不需要額外的創建對象。
1
2
3
4
5
6
7
8
9
10
|
public class test{ public static void main(string [] args){ string a= "abc" ; string b= "abc" ; //對象保存在string pool中 string c= new string( "abc" ); //以new創建的對象保存在堆中 system.out.println( "a==b:" +(a==b)); system.out.println( "a==c:" +(a==c)); } } |
實現string pool就需要string定義為final,否則,當引用a、b都指向“abc”時,通過a將對象改變后,引用b所指向的對象被動地改變了。那程序員不得氣得半死?
三、string不可變的其他好處
1、以string作為hashmap的key,string的不可變保證了hash值的不可變。
2、string作為網絡連接的參數,它的不可變性提供了安全性。
3、string不可變,所以線程安全。
以上所述是小編給大家介紹的java string不可變的好處詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!
原文鏈接:https://www.cnblogs.com/cangwei22/p/10582600.html