日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java中String类的concat方法___java的String字符串的concat()方法连接字符串和“+“连接字符串解释

發(fā)布時間:2025/3/12 java 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java中String类的concat方法___java的String字符串的concat()方法连接字符串和“+“连接字符串解释 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Java中String類的concat方法

在了解concat()之前,首先需要明確的是String的兩點特殊性。

  • 長度不可變
  • 值不可變
    這兩點從源碼中對String的聲明可以體現(xiàn):
private final char[] value ;

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

因此,當我們對String進行拼接后,產(chǎn)生的應(yīng)該是一個新的字符串。
對于這一點,我們可以對concat()進行源碼的解讀得出同樣的結(jié)論。

@param str 需要拼接到原字符串的新串 @param otherlen 新串的長度 @param len 原字符串的長度 @param buf 存放最終字符串的字符數(shù)組(長度為len+otherlen) @method copyOf(char[] original, int newLength) 復制指定的數(shù)組,截取或用 null 字符填充(如有必要),以使副本具有指定的長度。 @method getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 將字符從此字符串復制到目標字符數(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);}12345678910111213141516171819

源碼分析:

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

API中也對這個方法進行了解釋:

  • 如果參數(shù)字符串的長度為 0,則返回此 String 對象。
  • 否則,創(chuàng)建一個新的 String對象,用來表示由此 String 對象表示的字符序列和參數(shù)字符串表示的字符序列連接而成的字符序列。

綜上,當對String對象進行拼接時,會創(chuàng)建一個新的字符串來存儲新串。

String字符串的concat()方法源碼分析

1.java提供了“+”運算符能進行字符串的連接操作。
  • API里提供的是:
  • 首先,string類型是不可變的,所以,通過StringBuffer或者StringBuilder對象實現(xiàn)了字符串的拼接。通過創(chuàng)建StringBuffer或者StringBuilder對象,然后調(diào)用其中的append()方法,得到一個拼接后的StringBuffer或者StringBuilder對象,最后調(diào)用toString()方法,返回得到的String對象的地址值。
    舉例圖解:
2.concat()方法源碼分析
  • 源碼:
public String concat(String str) {//獲取傳入字符串的長度int otherLen = str.length();//如果傳入字符串長度為0,輸出原字符串if (otherLen == 0) {return this;}//獲取原字符串的長度int len = value.length;//調(diào)用Arrays.copyOf()方法,傳入原字符串,和原字符串和傳入字符串長度之和,返回連接后的字符數(shù)組,該數(shù)組從0-len包含著原字符串元素char buf[] = Arrays.copyOf(value, len + otherLen);//調(diào)用getChars()方法,傳入擴展后的字符數(shù)組和原字符串長度str.getChars(buf, len);//根據(jù)生成的拼接后的字符數(shù)組創(chuàng)建一個新的String對象return new String(buf, true);} public static char[] copyOf(char[] original, int newLength) {//根據(jù)傳入的字符串長度之和創(chuàng)建一個新的字符數(shù)組char[] copy = new char[newLength];//調(diào)用arraycopy()方法//將原數(shù)組元素從索引為0的位置開始復制,到另一個數(shù)組,從新數(shù)組索引為0的位置開始,復制的元素個數(shù)為調(diào)用Math.min(a,b)方法后得到的長度System.arraycopy(original, 0, copy, 0,Math.min(original.length, newLength));//返回的字符數(shù)組是包含著原字符串元素的擴展后的字符數(shù)組return copy;} public static int min(int a, int b) {//三元表達式判斷a和b長度,輸出a和b之間的最小值return (a <= b) ? a : b;} void getChars(char dst[], int dstBegin) {//調(diào)用System.arraycopy()方法//將傳入字符串從0的位置開始復制到擴展后的字符串,從原字符串長度的位置開始復制,復制的元素個數(shù)為傳入字符穿的長度System.arraycopy(value, 0, dst, dstBegin, value.length);}

總結(jié)

以上是生活随笔為你收集整理的Java中String类的concat方法___java的String字符串的concat()方法连接字符串和“+“连接字符串解释的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。