欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談java String不可變的好處

 更新時間:2019年03月23日 14:34:33   作者:滄唯  
這篇文章主要介紹了java String不可變的好處,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、java內(nèi)部String類的實(shí)現(xiàn):

java 8:

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標(biāo)識了編碼)

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不可變?

因?yàn)樵诔绦蚓帉懙倪^程中,會大量地用到String常量,如果每次聲明一個String引用都要新建一個String對象,那么會造成空間的極大浪費(fèi)。于是,在java的堆中開辟了一塊存儲空間String pool,用于存儲String常量對象。當(dāng)有多個String引用指向同樣的String字符串時,實(shí)際上是指向的是同一個Sting pool中的對象,而不需要額外的創(chuàng)建對象。

public class Test{
  public static void main(String [] args){
   String a="abc";
   String b="abc";//對象保存在string pool中
   String c=new String("abc");//以new創(chuàng)建的對象保存在堆中
   System.out.println("a==b:"+(a==b));
   System.out.println("a==c:"+(a==c));
       
 } 
}

實(shí)現(xiàn)String pool就需要String定義為final,否則,當(dāng)引用a、b都指向“abc”時,通過a將對象改變后,引用b所指向的對象被動地改變了。那程序員不得氣得半死?

 三、String不可變的其他好處

1、以String作為HashMap的key,String的不可變保證了hash值的不可變。

2、String作為網(wǎng)絡(luò)連接的參數(shù),它的不可變性提供了安全性。

3、String不可變,所以線程安全。

以上所述是小編給大家介紹的java String不可變的好處詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • 解決Springboot啟動報錯:類文件具有錯誤的版本61.0,應(yīng)為?52.0

    解決Springboot啟動報錯:類文件具有錯誤的版本61.0,應(yīng)為?52.0

    這篇文章主要給大家介紹了關(guān)于解決Springboot啟動報錯:類文件具有錯誤的版本?61.0,應(yīng)為?52.0的相關(guān)資料,這是查閱了網(wǎng)上的很多資料才解決的,分享給大家,需要的朋友可以參考下
    2023-01-01
  • JavaIO?BufferedReader和BufferedWriter使用及說明

    JavaIO?BufferedReader和BufferedWriter使用及說明

    這篇文章主要介紹了JavaIO?BufferedReader和BufferedWriter使用及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • SpringCloud+MyBatis分頁處理(前后端分離)

    SpringCloud+MyBatis分頁處理(前后端分離)

    這篇文章主要為大家詳細(xì)介紹了SpringCloud+MyBatis分頁處理,前后端分離,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • Java中Runnable與Callable接口的區(qū)別詳解

    Java中Runnable與Callable接口的區(qū)別詳解

    這篇文章主要為大家詳細(xì)介紹了Java中Runnable與Callable接口的區(qū)別,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Java有一定的幫助,需要的可以參考一下
    2023-03-03
  • Spring Native項目實(shí)戰(zhàn)(體驗(yàn)79毫秒啟動springboot應(yīng)用)

    Spring Native項目實(shí)戰(zhàn)(體驗(yàn)79毫秒啟動springboot應(yīng)用)

    Spring Native是Spring提供的、制作native image的技術(shù)方案,本篇主要內(nèi)容是開發(fā)springboot應(yīng)用再構(gòu)建為native image的方法,通過Spring Native項目實(shí)戰(zhàn)讓大家體驗(yàn)79毫秒啟動springboot應(yīng)用,感興趣的朋友跟隨小編一起看看吧
    2021-05-05
  • JAVA生成pdf文件的實(shí)操指南

    JAVA生成pdf文件的實(shí)操指南

    最近項目需要實(shí)現(xiàn)PDF下載的功能,由于沒有這方面的經(jīng)驗(yàn),從網(wǎng)上花了很長時間才找到相關(guān)的資料,下面這篇文章主要給大家介紹了關(guān)于JAVA生成pdf文件的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • SpringCloud FeignClient 超時設(shè)置

    SpringCloud FeignClient 超時設(shè)置

    FeignClient?默認(rèn)的超時時間可能不滿足你的需求,你可以通過幾種方式來自定義這些超時設(shè)置,具有一定的參考價值,感興趣的可以了解一下
    2024-08-08
  • IntelliJ IDEA 2020.2 配置大全詳細(xì)圖文教程(更新中)

    IntelliJ IDEA 2020.2 配置大全詳細(xì)圖文教程(更新中)

    這篇文章主要介紹了IntelliJ IDEA 2020.2 配置大全(更新中),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • springboot之SpringApplication生命周期和事件機(jī)制解讀

    springboot之SpringApplication生命周期和事件機(jī)制解讀

    這篇文章主要介紹了springboot之SpringApplication生命周期和事件機(jī)制,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • 學(xué)習(xí)SpringBoot容器功能及注解原理

    學(xué)習(xí)SpringBoot容器功能及注解原理

    這篇文章主要介紹了學(xué)習(xí)SpringBoot容器功能及注解原理,文中通過詳細(xì)的代碼示例對SpringBoot容器功能及注解原理進(jìn)行了解析,有需要的朋友可以借鑒參考下
    2021-09-09

最新評論