Java String 一道经典考题

问:下面两行代码执行完成后,原始的 String 对象中的内容到底变了没有?
String str = "Hello";
str = str + " world!”; 

答:没有。因为 java 中的 String 是被设计成不可变类的,所以它的所有对象都是不可变的。在上面那段代码中,str 首先指向一个 String 对象,内容是 "Hello",接着我们对 str 进行了 + 操作,这时 str 不会再指向原来那个对象,而是指向了另一个 String 对象,其内容为 "Hello world!",原来那个对象还存在于内存之中,只是 str 这个引用变量不再指向它了。

所以,如果我们需要经常对字符串进行修改,使用 String 来代表字符串一般会引起比较大的内存开销。因为 String 对象一旦创建后就不能再改变,所以对于每一个不同的字符串都需要一个新的 String 对象来表示。这种情况下我们应该使用 StrinBuffer 或者 StringBuilder 类。

此外,对于字符串常量,如果内容相同,Java 会认为它们代表的是同一个 String 对象。而用关键字 new 调用构造器,无论内容是否相同,总是会创建一个新的对象。

本文引用自 关于 Java String 的一道经典笔试题,值得一看!

你可能感兴趣的:(Java String 一道经典考题)