Java核心技术精要:String与StringBuffer的深度解析

需积分: 1 0 下载量 128 浏览量 更新于2024-07-28 收藏 1.16MB DOC 举报
"Core Java精华文档包含了对Java SE的深入探讨,特别是关于Java API的使用,特别是`java.lang`包中的`String`类和`StringBuffer`类。文档还涉及了如何处理字符串常量和对象的相等性,以及如何在Java中读取用户输入,包括处理不同操作系统的换行符差异。" 在Java编程中,`String`类和`StringBuffer`类是处理文本数据的重要工具。`String`类在`java.lang`包中,意味着我们通常无需显式导入即可使用。`String`对象一旦创建,其内容就不能更改,因此它们是不可变的。这意味着每次对`String`对象进行修改,都会创建一个新的`String`对象,这在处理大量字符串操作时可能导致性能问题。 相比之下,`StringBuffer`类提供了可变的字符串,允许我们在已有字符串基础上进行添加、删除或修改,而不会每次都创建新对象。它的`append()`方法用于将内容添加到现有的字符串缓冲区,`toString()`方法则用于将`StringBuffer`对象转换为`String`对象。例如,`"a" + 4 + "c"`在编译时会转化为`new StringBuffer().append("a").append(4).append("c").toString();`这样的形式。 在比较`String`对象时,需要注意的是字符串常量池的概念。当两个`String`对象包含相同的字符序列时,它们可能引用同一个字符串常量,如`"hello"`。因此,`s1 == s2`在这种情况下可能是`true`,因为它们指向内存中的同一位置。然而,如果通过`new String()`构造函数创建`String`对象,即使内容相同,也会创建两个不同的对象,这时`s1 != s2`。 在处理用户输入时,文档提供了一个简单的示例,展示了如何使用`System.in.read()`方法逐字节地读取标准输入。在这个例子中,程序会读取用户输入,直到遇到"bye"为止。由于不同操作系统对换行符有不同的表示(Windows使用`\r\n`,Unix只使用`\n`),代码需要能够处理这两种情况。当读取到`\r`或`\n`时,会将当前缓冲区的内容转换为`String`并检查是否等于"bye",如果是,程序将终止;如果不是,缓冲区清零,准备接收下一次输入。 这段文档对于理解Java中字符串的使用和处理用户输入的方法非常有用,是Core Java学习的重要参考资料。