当前位置: 移动互联网学院 > Java培训 > JAVA开发 > Java中字符串相加原理揭秘
Java中字符串相加原理揭秘 时间:2017-08-29     来源:华清远见JAVA学院

我们都知道Java中int等基本数据类型的加减操作,终的结果仍然存储到原变量空间中,但是String字符串属于特殊变量,字符串的数据是存储到对象变量中的,那么字符串相加的原理有什么不同呢?今天华清Java学院小编就为大家揭秘一下Java中字符串相加原理。

Java中字符串相加

Java中字符串相加原理是怎样的呢?

实际上Java中字符串相加之后,原来的字符串并没有发生改变,这是因为String被设计成不可变(immutable)类,所以它的所有对象都是不可变对象。那么Java中字符串相加的原理又是什么样的呢?我们来看一下具体的案例:

String s = "Hello";

s = s + " world!";

当然终的结果是打印s输出Hello world!,但是具体的过程和普通变量相加并不相同。

在这段代码中,s原先指向一个String对象,内容是 "Hello",然后我们对s进行了+操作,那么s所指向的那个对象是否发生了改变呢?答案是没有。这时,s只是不指向原来那个对象了,而指向了另一个 String对象,内容为"Hello world!",原来那个对象还存在于内存之中,只是s这个引用变量不再指向它了。

通过上面的说明,我们很容易导出另一个结论,如果经常对字符串进行各种各样的修改,或者说,不可预见的修改,那么使用String来代表字符串的话会引起很大的内存开销。因为String对象建立之后不能再改变,所以对于每一个不同的字符串,都需要一个String对象来表示。所以为了应对字符串经常改变的情况,可以考虑使用StringBuffer类, 它允许修改,而不是每个不同的字符串都要生成一个新的对象。并且,这两种类的对象转换十分容易。

至于为什么要把String类设计成不可变类,是它的用途决定的。其实不只String,很多Java标准类库中的类都是不可变的。在开发一个系统的时候,我们有时候也需要设计不可变类,来传递一组相关的值,这也是面向对象思想的体现。不可变类有一些优点,比如因为它的对象是只读的,所以多线程并发访问也不会有任何问题。当然也有一些缺点,比如每个不同的状态都要一个对象来代表,可能会造成性能上的问题。所以Java标准类库还提供了一个可变版本,即 StringBuffer。

以上简单介绍了Java中字符串相加原理,希望对大家以后使用和理解Java字符串有所帮助。

X