深入理解JAVA:String与StringBuffer的较量
需积分: 16 163 浏览量
更新于2024-07-24
收藏 1.27MB DOC 举报
"JAVA精华讲解,涵盖了深入JAVAAPI,特别是对Lang包中的String类和StringBuffer类进行了详尽的解析,同时提供了一个实用的逐行读取键盘输入的示例代码。"
在Java编程语言中,理解和掌握String类与StringBuffer类是非常重要的。它们都是用来表示和操作字符串,但在不同场景下各有优势。
String类是Java中最常用的类之一,位于java.lang包中,因此在使用时无需显式导入。String类的特点是它的内容一旦创建就不可更改。这意味着,每次对String对象进行修改(如拼接、替换字符等),都会创建一个新的String对象。例如,`String x = "a" + 4 + "c"` 在编译时会被优化为 `String x = new StringBuffer().append("a").append(4).append("c").toString();` 这样的形式,以避免不必要的对象创建。值得注意的是,由于字符串常量池的存在,当创建两个引用相同的字符串字面量(如`Strings1 = "hello"; String s2 = "hello";`),s1和s2实际上是相等的(`s1 == s2`),因为它们都指向了池中的同一对象。然而,如果通过`new`关键字创建不同的实例,即使内容相同,两个对象也是不相等的(`s1 != s2`)。
相比之下,StringBuffer类是为了支持字符串的可变性而设计的。它允许在现有字符串基础上进行添加、删除或替换字符的操作,而不会每次都创建新的对象。这在需要频繁修改字符串的场合非常有用,可以显著提高性能。例如,`StringBuffer sb = new StringBuffer("hello"); sb.append("world");` 会在原有的"hello"后面添加"world",而不会创建新的对象。
在输入/输出方面,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(); // 读取一个字节的内容
} catch (Exception e) {
// 异常处理
}
switch (ch) {
case '\r': // 回车时,不处理
break;
case '\n': // 换行时,将数组内容放入字符串
strInfo = new String(buf, 0, pos);
if (strInfo.equals("bye")) { // 如果内容为bye,退出程序
return;
} else { // 否则,输出并清零pos,准备下次存储
// 输出代码...
pos = 0;
}
}
// 其他处理逻辑...
}
}
}
```
这段代码利用`System.in.read()`方法逐字节读取输入,遇到回车(`\r`)或换行(`\n`)时处理数据。当读到"bye"时,程序结束。这种逐行读取的方式在处理用户交互或命令行输入时非常常见。
理解并熟练运用String和StringBuffer以及如何处理键盘输入是Java开发的基本技能。它们在日常编码中扮演着重要角色,尤其是在处理文本数据和用户交互时。
2010-06-27 上传
464 浏览量
2014-01-04 上传
2021-10-04 上传
点击了解资源详情
2008-03-23 上传
1546 浏览量
2008-09-01 上传
2008-09-22 上传
xiaoya336
- 粉丝: 18
- 资源: 66
最新资源
- WPF渲染层字符绘制原理探究及源代码解析
- 海康精简版监控软件:iVMS4200Lite版发布
- 自动化脚本在lspci-TV的应用介绍
- Chrome 81版本稳定版及匹配的chromedriver下载
- 深入解析Python推荐引擎与自然语言处理
- MATLAB数学建模算法程序包及案例数据
- Springboot人力资源管理系统:设计与功能
- STM32F4系列微控制器开发全面参考指南
- Python实现人脸识别的机器学习流程
- 基于STM32F103C8T6的HLW8032电量采集与解析方案
- Node.js高效MySQL驱动程序:mysqljs/mysql特性和配置
- 基于Python和大数据技术的电影推荐系统设计与实现
- 为ripro主题添加Live2D看板娘的后端资源教程
- 2022版PowerToys Everything插件升级,稳定运行无报错
- Map简易斗地主游戏实现方法介绍
- SJTU ICS Lab6 实验报告解析