java中的String類型相加確實效率會降低,原因的話我們得從Java的String類的底層來說起。

為何會降低效率

那么我們直接上圖來看看Java的String類底層是怎么個樣式:

為什么說java的String相加減效率低?

大家可以看到String類是被final關鍵字修飾的,那么被final關鍵字修飾的成員有一個共同的特征,不能被修改。

那如果我們的String類是不能修改的話,那在如果字符串相加,底層是如何在運行呢?我們來通過下面的示例圖來看看:

java的String相加減效率低

我們先來聲明一個String類型變量叫Str1,存放的值為:Hello;上圖是聲明出來在內存中的地址分配;
String Str1=Hello;

如果做字符串相加的話,我們在來看看在內存中分配的方式:

我們來給上面的變量加一個World示例代碼:

Str1=Str1+"World";

java的String相加減效率低

大家可以看到如果你通過+把World加起來之后,Str1的值通過圖我們可以看到在內存中又重新開辟了空間存儲,并且之前的值也不會被刪除掉。所以這個時候一個創建一個保留導致效率變低的就是這個原因;

如何解決

其實在Java的API中為了解決這個問題提供了兩個類:

StringBuffer類

StringBuilder類

這兩個類的產生就是為了解決字符串的操作問題,舉個最簡單的例子,如果你在做字符串相加的操作,不會在內存中重新創建空間存儲。他們兩個類各有各的特點,所以在使用的時候自己去根據自己的實際情況去選擇。這個具體的使用我就不在做過多的說明了。

總結:String類的字符串類型做相加操作最主要的原因就是因為String類是final修飾的,所以導致做相加操作會在內存空間中重新創建空間導致的。為了解決這個問題可以去用到StringBuffer類或者StringBuilder類。