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

深入剖析Java中String類的concat方法

 更新時(shí)間:2021年12月08日 10:33:43   作者:拘夢(mèng)2014  
這篇文章主要介紹了Java中String類的concat方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Java String類的concat方法

在了解concat()之前,首先需要明確的是

String的兩點(diǎn)特殊性

  • 長(zhǎng)度不可變
  • 值不可變

這兩點(diǎn)從源碼中對(duì)String的聲明可以體現(xiàn):

private final char[] value ;

其中final對(duì)應(yīng)值的不可更改的特性;而char[]對(duì)應(yīng)String是長(zhǎng)度不可更改的特性。

因此,當(dāng)我們對(duì)String進(jìn)行拼接后,產(chǎn)生的應(yīng)該是一個(gè)新的字符串。

對(duì)于這一點(diǎn),我們可以對(duì)concat()進(jìn)行源碼的解讀得出同樣的結(jié)論。

  • @param str 需要拼接到原字符串的新串
  • @param otherlen 新串的長(zhǎng)度
  • @param len 原字符串的長(zhǎng)度
  • @param buf 存放最終字符串的字符數(shù)組(長(zhǎng)度為len+otherlen)
@method  copyOf(char[] original, int newLength) 

復(fù)制指定的數(shù)組,截取或用 null 字符填充(如有必要),以使副本具有指定的長(zhǎng)度。

@method getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 

將字符從此字符串復(fù)制到目標(biāo)字符數(shù)組。

public String concat(String str) {
        int otherLen = str.length();
        if (otherLen == 0) {
            return this;
        }
        int len = value.length;
        char buf[] = Arrays.copyOf(value, len + otherLen);
        str.getChars(buf, len);
        return new String(buf, true);
    }

源碼分析

concat()方法首先獲取拼接字符串的長(zhǎng)度,判斷這個(gè)字符串長(zhǎng)度是否為0(判斷這個(gè)用來(lái)拼接的字符串是不是空串),如果是就返回原來(lái)的字符串(等于沒(méi)有拼接);否則就獲取源字符串的長(zhǎng)度,創(chuàng)建一個(gè)新的char[]字符數(shù)組,這個(gè)字符數(shù)組的長(zhǎng)度是拼接字符串的長(zhǎng)度與源字符串的長(zhǎng)度之和,通過(guò)Arrays類的copyOf方法復(fù)制源數(shù)組,然后通過(guò)getChars方法將拼接字符串拼接到源字符串中,然后將新串返回。

API中也對(duì)這個(gè)方法進(jìn)行了解釋:

如果參數(shù)字符串的長(zhǎng)度為 0,則返回此 String 對(duì)象。

否則,創(chuàng)建一個(gè)新的 String對(duì)象,用來(lái)表示由此 String 對(duì)象表示的字符序列和參數(shù)字符串表示的字符序列連接而成的字符序列。

綜上,當(dāng)對(duì)String對(duì)象進(jìn)行拼接時(shí),會(huì)創(chuàng)建一個(gè)新的字符串來(lái)存儲(chǔ)新串。

String類中concat()方法筆記及底層實(shí)現(xiàn)

public String concat(String str)

將指定字符串連接到此字符串的結(jié)尾,需要?jiǎng)?chuàng)建對(duì)象才能夠調(diào)用該方法,返回值為字符串。

public  String  concat1(String s){
  String a = new String("jijeufh");
  char [] b = new char[a.length()];
  char [] d =  new char[b.length+s.length()];
  //創(chuàng)建一個(gè)能夠容納兩個(gè)數(shù)組長(zhǎng)度的數(shù)組
   a.getChars(0,b.length,d,0);
   //使用getChars方法,將對(duì)象數(shù)組中賦值到新的數(shù)組中,偏移量為0;
   s.getChars(0, s.length(), d, b.length);
   //使用getChars()方法將,參數(shù)數(shù)組賦值到新的數(shù)組中,偏移量對(duì)象數(shù)組的長(zhǎng)度。
   String dd = new String(d);
   //通過(guò)String構(gòu)造器將數(shù)組轉(zhuǎn)換成為新的字符串。
   return dd;
  }
 ```

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java CountDownLatch完成異步回調(diào)實(shí)例詳解

    Java CountDownLatch完成異步回調(diào)實(shí)例詳解

    這篇文章主要介紹了Java CountDownLatch完成異步回調(diào)實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • maven-assembly-plugin報(bào)紅無(wú)法加載報(bào)錯(cuò):Plugin?‘maven-assembly-plugin:‘?not?found

    maven-assembly-plugin報(bào)紅無(wú)法加載報(bào)錯(cuò):Plugin?‘maven-assembly-plugin

    maven-assembly-plugin是一個(gè)常用的打包插件,但是在使用過(guò)程中經(jīng)常會(huì)遇到各種報(bào)錯(cuò),本文就來(lái)介紹一下maven-assembly-plugin報(bào)紅無(wú)法加載報(bào)錯(cuò),具有一定的參考價(jià)值
    2023-08-08
  • 一文教會(huì)你使用Java中的枚舉Enmu

    一文教會(huì)你使用Java中的枚舉Enmu

    枚舉是 Java 中的一種特殊類型,它用于表示一組固定值,這篇文章就是來(lái)和大家講講枚舉的作用與具體使用,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-06-06
  • Java并發(fā)編程學(xué)習(xí)之Unsafe類與LockSupport類源碼詳析

    Java并發(fā)編程學(xué)習(xí)之Unsafe類與LockSupport類源碼詳析

    這篇文章主要給大家介紹了關(guān)于Java并發(fā)編程學(xué)習(xí)之Unsafe類與LockSupport類源碼的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧
    2018-06-06
  • Java反射(Class類,Class對(duì)象獲取)

    Java反射(Class類,Class對(duì)象獲取)

    下面是對(duì)Java反射機(jī)制是在程序的運(yùn)行過(guò)程中,Java語(yǔ)言的反射機(jī)制的超詳細(xì)解說(shuō),點(diǎn)進(jìn)來(lái)的小伙伴不要錯(cuò)過(guò)奧
    2021-08-08
  • JavaMe開發(fā)自適應(yīng)滾動(dòng)顯示

    JavaMe開發(fā)自適應(yīng)滾動(dòng)顯示

    我們常看到一些滾動(dòng)顯示的實(shí)例,比如UC瀏覽器中,顯示網(wǎng)頁(yè)的內(nèi)容。當(dāng)內(nèi)容比較多時(shí),采用滾動(dòng)分頁(yè)顯示是合理的。在Canvas中繪圖中,多余的內(nèi)容被截?cái)嗔?。如何?shí)現(xiàn)滾動(dòng)分頁(yè)顯示呢?
    2015-09-09
  • Spring注解@RestControllerAdvice原理解析

    Spring注解@RestControllerAdvice原理解析

    這篇文章主要介紹了Spring注解@RestControllerAdvice原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • java使用Jsoup連接網(wǎng)站超時(shí)的解決方法

    java使用Jsoup連接網(wǎng)站超時(shí)的解決方法

    jsoup是一個(gè)非常好的解析網(wǎng)頁(yè)的包,用java開發(fā)的,提供了類似DOM,CSS選擇器的方式來(lái)查找和提取文檔中的內(nèi)容,提取文檔內(nèi)容時(shí)會(huì)出現(xiàn)超時(shí)的情況,解決方法可看下文
    2013-11-11
  • 詳解Java 連接MongoDB集群的幾種方式

    詳解Java 連接MongoDB集群的幾種方式

    這篇文章主要介紹了詳解Java 連接MongoDB集群的幾種方式,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • Intellj?idea新建的java源文件夾不是藍(lán)色的圖文解決辦法

    Intellj?idea新建的java源文件夾不是藍(lán)色的圖文解決辦法

    idea打開java項(xiàng)目后新建的模塊中,java文件夾需要變成藍(lán)色,這篇文章主要給大家介紹了關(guān)于Intellj?idea新建的java源文件夾不是藍(lán)色的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2024-02-02

最新評(píng)論