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

為何會(huì)降低效率

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

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

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

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

java的String相加減效率低

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

如果做字符串相加的話,我們?cè)趤砜纯丛趦?nèi)存中分配的方式:

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

Str1=Str1+"World";

java的String相加減效率低

大家可以看到如果你通過+把World加起來之后,Str1的值通過圖我們可以看到在內(nèi)存中又重新開辟了空間存儲(chǔ),并且之前的值也不會(huì)被刪除掉。所以這個(gè)時(shí)候一個(gè)創(chuàng)建一個(gè)保留導(dǎo)致效率變低的就是這個(gè)原因;

如何解決

其實(shí)在Java的API中為了解決這個(gè)問題提供了兩個(gè)類:

StringBuffer類

StringBuilder類

這兩個(gè)類的產(chǎn)生就是為了解決字符串的操作問題,舉個(gè)最簡(jiǎn)單的例子,如果你在做字符串相加的操作,不會(huì)在內(nèi)存中重新創(chuàng)建空間存儲(chǔ)。他們兩個(gè)類各有各的特點(diǎn),所以在使用的時(shí)候自己去根據(jù)自己的實(shí)際情況去選擇。這個(gè)具體的使用我就不在做過多的說明了。

總結(jié):String類的字符串類型做相加操作最主要的原因就是因?yàn)镾tring類是final修飾的,所以導(dǎo)致做相加操作會(huì)在內(nèi)存空間中重新創(chuàng)建空間導(dǎo)致的。為了解決這個(gè)問題可以去用到StringBuffer類或者StringBuilder類。