1. 程式人生 > >快彩網cai票php源碼thinkphp框架開發webpack 與 vue

快彩網cai票php源碼thinkphp框架開發webpack 與 vue

字符 但是 字符串 例子 tps com .class hash php

String、StringBuffer、StringBuilder都是JAVA中常用的字符串操作類,對於他們的區別大家也都能耳熟能詳,但底層到底是怎樣實現的呢?今天就再深入分析下這三種字符串操作的區別、各自的原理及使用場景。 ???????請尊重作者勞動成果,轉載請標明原文鏈接:快彩網cai票php源碼https://dashengba.com 大聖源碼論壇扣3266397597 一、String ???????先來看一下JDK中String中的部分源碼: View Code ????????可以看到String類、以及value都是final類型的,這樣就表明String是無法被繼承的,value是無法被改寫的。當通過String的構造函數初始化新的String對象時,也只是根據傳入的引用對象的value和hashcode進行了賦值。看下面的例子: Vew Code ???????執行javac StringTest.java後,通過javap -v StringTest.class看下生成的class文件: View Code ????????可以看到對於相同的字符串“abc”的引用都是相同的(對於常量池中的相同位置),這樣能夠節省內存空間,但是缺點就是對於頻繁的字符串拼接操作,會造成內存空間的浪費。(需要註意的是這種字符串的拼接操作,從JDK8 開始,會自動被編譯成StringBuilder,是不是很666^_^,但還是建議不通過JDK途徑去自動轉。)看下面的代碼: View Code ???????然後再通過javap看下class文件: View Code 二、StringBuilder ???????也是先來看StringBuilder的源碼: View Code ????????可以看到StringBuilder的value是個char數組,(當然從JDK9開始,value從char數組變成了byte數組)。每次append時都是通過調用native的System.arraycopy實現的(在getChars中調用的)。 三、StringBuffer S???????tringBuffer的源碼如下: View Code ????????和StringBuilder一樣,都是用了char數組保存value,append也是調用了AbstractStringBuilder的append方法。區別只是在於char數組加了transient關鍵字,以及方法上加了synchronized方法。 ???????綜上所述,String、StringBuilder、StringBuffer的使用場景如下: ???????當處理定長字符串時,建議用String; ???????當處理變長字符串時,並且是單線程環境時,建議用StringBuilder; ???????當處理變長字符串時,並且是多線程環境時,建議用StringBuffer。

快彩網cai票php源碼thinkphp框架開發webpack 與 vue