JAVA String与StringBuffer的深度解析
需积分: 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编程中的基础知识点。在实际开发中,这些知识能帮助我们编写更高效、更健壮的代码。
2015-07-17 上传
2023-07-28 上传
2023-10-30 上传
2023-07-19 上传
2023-07-09 上传
2024-10-30 上传
2023-09-02 上传
tianting1
- 粉丝: 1
- 资源: 41
最新资源
- MATLAB新功能:Multi-frame ViewRGB制作彩色图阴影
- XKCD Substitutions 3-crx插件:创新的网页文字替换工具
- Python实现8位等离子效果开源项目plasma.py解读
- 维护商店移动应用:基于PhoneGap的移动API应用
- Laravel-Admin的Redis Manager扩展使用教程
- Jekyll代理主题使用指南及文件结构解析
- cPanel中PHP多版本插件的安装与配置指南
- 深入探讨React和Typescript在Alias kopio游戏中的应用
- node.js OSC服务器实现:Gibber消息转换技术解析
- 体验最新升级版的mdbootstrap pro 6.1.0组件库
- 超市盘点过机系统实现与delphi应用
- Boogle: 探索 Python 编程的 Boggle 仿制品
- C++实现的Physics2D简易2D物理模拟
- 傅里叶级数在分数阶微分积分计算中的应用与实现
- Windows Phone与PhoneGap应用隔离存储文件访问方法
- iso8601-interval-recurrence:掌握ISO8601日期范围与重复间隔检查