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类。