JAVA String与StringBuffer的深度解析

需积分: 9 9 下载量 198 浏览量 更新于2024-07-25 收藏 1.23MB PDF 举报
"JAVA葵花宝典" 在Java编程中,`String`类和`StringBuffer`类是处理文本字符串的两种重要工具。`String`类代表不可变的字符串,这意味着一旦创建,其内容就不能更改。`StringBuffer`类则是为了解决字符串频繁修改效率低下的问题而设计的,它提供了可变的字符串操作。 `String`类在`java.lang`包中,是Java的基础类,无需显式导入即可使用。例如,`String x = "a" + 4 + "c"` 这样的代码在编译时会被优化为使用`StringBuffer`进行拼接,因为直接使用`String`进行连接会产生多个中间对象,而`StringBuffer`则可以通过`append()`方法避免这种不必要的内存开销。 字符串常量池是一个特殊的地方,存储了所有的字符串字面值。当创建两个引用相同的字符串字面值时,如`String s1 = "hello"; String s2 = "hello";`,`s1`和`s2`实际上指向池中的同一个对象,因此`s1 == s2`会返回`true`。然而,如果通过`new`关键字创建字符串,即使内容相同,也会产生两个不同的对象,如`String s1 = new String("hello"); String s2 = new String("hello");`这时`s1 != s2`。 在处理用户输入时,经常会遇到不同平台下的换行符差异。在Windows系统中,换行由`\r\n`表示,而在Unix或Linux系统中,换行仅用`\n`表示。Java程序在编写时应考虑到这些差异。例如,以下代码示例展示了如何逐行读取键盘输入,直到用户输入“bye”为止: ```java public class ReadLine { public static void main(String[] args) { String strInfo = null; int pos = 0; byte[] buf = new byte[1024]; // 定义一个数组,存放换行前的各个字符 int ch = 0; // 存放读入的字符 System.out.println("Please input a string:"); while (true) { try { ch = System.in.read(); // 该方法每次读入一个字节的内容到ch变量中。 } catch (Exception e) { } switch (ch) { case '\r': // 回车时,不进行处理 break; case '\n': // 换行时,将数组总的内容放进字符串中 strInfo = new String(buf, 0, pos); // 该方法将数组中从第0个开始,到第pos个结束存入字符串。 if (strInfo.equals("bye")) // 如果该字符串内容为bye,则退出程序。 return; else // 如果不为bye,则输出,并且... ``` 这段代码中,`System.in.read()`用来读取标准输入流的一个字节,然后根据读取到的字节值判断是否为换行符。当检测到`\n`时,会创建一个新的`String`对象,并检查其内容是否为"bye"。如果用户输入的字符串是"bye",则程序结束;否则,程序会继续等待用户输入。 理解`String`与`StringBuffer`的区别,以及如何处理跨平台的换行符问题,是Java编程中的基础知识点。在实际开发中,这些知识能帮助我们编写更高效、更健壮的代码。