Strng的特性筆記

下面的內容我將會對String的一些特性進行列舉,順便將String與StringBuffer、StringBuilder進行對比

String

1.String是Java中不可變的對象。
2.創建String的主要方法有兩種:String str = "abc" 或者 String str = new String("abc");
3.當String的創建方式爲直接用引號時,Java會首先在JVM的字符串常量池中搜索是否還有相同值的字符串,如果有就直接返回這個字符串的引用,否則就新建一個新的字符串並將該字符串放入常量池中。
通過這種方式,JVM可以節省一定的內存,但是當使用new關鍵字的時候,jvm會直接在堆創建一個新的對象
4.String之間可以通過“+”號實現兩個字符串的連接功能,其內部是通過StringBuffer完成這個操作的
5.String重寫了equals()和hashCode()兩個方法。只有當兩個字符串的字符和字符順序相同時,兩個字符串的哈希值纔會相同。String是不可變對象,且String內部的屬性除了hash屬性,其他都是final修飾的。
6.hash屬性是由String屬性中其他final屬性計算出來的,因此每次hashCode()被調用的時候,該方法會返回同一個值緩存的hash變量值。
7.Java內部採用的是Unicode編碼,因此無論什麼字符都可以用兩個字節表示。由於兩個字節佔16位,因此也叫 UTF-16。每兩個字節表示一個字符可以簡化字符串操作

String、StringBuffer和StringBuilder

1.首先,String這個變量是不可變的,而另外兩個是可變的。
2.StringBuffer是線程安全和線程同步的。StringBuilder則不是。由於這個原因,StringBuilder操作字符串的時候回比StringBuffer效率更高。

另外,關於這個我可以身邊同學告訴我老是忘記哪個是線程安全哪個不是,這裏給大家介紹下一個記憶的方法。我們都知道Concurrence是併發的意思,然後這三個單詞StringBuilder、StringBuffer、Concurrence都有一個英文字母U,我們只要記住併發的單詞U的發音是ʌ 然後併發的StringBuffer也是這一個,聯想一下就能記下來啦。

3.StringBuilder是在JAVA1.5 之後推出的,目的就是爲了解決StringBuffer在日常編程中用處不大,但是實現並影響效率,因此推出了非併發的StringBuilder.

關於String的知識就這麼多,想起啊來了再補充,也歡迎大家指正。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章