【发布时间】:2014-12-12 02:50:59
【问题描述】:
我引用了 Herbert Schildt 关于 Java 的书,字符串处理章节,
append( )方法最常在+运算符用于 String 对象时调用。 Java 自动将对 String 实例的修改更改为对 字符串缓冲区实例。因此,串联会在 StringBuffer 对象上调用append( )。
我很清楚串联会在 StringBuffer 实例上调用 append( )。作者所说的“+ 运算符在 String 对象上使用时最常调用方法”是什么意思?据我了解,'append()' 不能与字符串一起使用。
在执行连接之后,编译器插入一个对
toString( )的调用来转 可修改的 StringBuffer 变回一个常量 String。这一切似乎都不合理 复杂的。为什么不只拥有一个字符串类并让它的行为或多或少像 字符串缓冲区?答案是性能。 Java 运行了许多优化 时间可以让我们知道 String 对象是不可变的。值得庆幸的是,Java 隐藏了大部分 Strings 和 StringBuffers 之间转换的复杂性。其实很多程序员 永远不会觉得需要直接使用 StringBuffer 并且能够表达大多数操作 就字符串变量的 + 运算符而言。
我想知道知道 String 对象是不可变的,Java 运行时可以进行哪些优化?
详细说明代码总能让我更好地理解上述问题吗?
【问题讨论】:
-
Java 编译器会将 + 替换为 StringBuffer(实际上现在是 StringBuilder)并调用 append。
-
他是否想说这样的话 String s1; s1 = sb.append("a = ").append(a).append("!").toString();
-
编译器会用类似的东西替换
String s1 = "a = " + a + "!";;是的。
标签: java string append stringbuffer