Java语言中的String、StringBuffer和StringBuilder三者的详细介绍

简介:

String:内容不可更改

String字符串对象的内容不可更改,更改是一种假象,实际更改的是堆内存的指向。

例如:String str = "Hello"; str+" word!";

首先系统会在栈内存中开辟一个栈空间存储"str",然后在堆内存中开辟一个堆空间存储"Hello",栈内存空间中的"str"指向堆内存空间的"Hello"。到" str+"word!"; "时,系统会再开辟两个堆内存空间,一个存放" word!",另一个存放"Hello word!",然后栈内存空间中的"str"指向堆内存空间的"Hello word!",之后"Hello"与" word!"所占的堆内存空间会因为没有被引用而被系统回收。所以,用String变量拼接字符串的时候与其他两种字符串操作对象相比,较为耗内存空间。

StringBuffer:内容可以更改

StringBuffer是String缓冲区的意思,其本身也是操作字符串,但是它与String不同,StringBuffer可以更改指向的堆内存空间存储的内容,所以它较String省内存,但是速度较String稍慢。StringBuffer是一个操作类,所以必须通过实例化进行操作,不然会报空指针异常错误,而String变量可以直接赋值初始化。

StringBuilder:单线程建议优先考虑该类,速度比StringBuffer快

StringBuilder是一个可变的字符序列,该类被设计作为StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候。因为在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的。单线程建议优先考虑该类,速度比StringBuffer快。

需要注意的是String类和StringBuffer都是被final关键字修饰的。对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。

相关文章
|
12月前
|
编解码 Java 开发者
Java String类的关键方法总结
以上总结了Java `String` 类最常见和重要功能性方法。每种操作都对应着日常编程任务,并且理解每种操作如何影响及处理 `Strings` 对于任何使用 Java 的开发者来说都至关重要。
586 5
|
存储 SQL 缓存
Java字符串处理:String、StringBuilder与StringBuffer
本文深入解析Java中String、StringBuilder和StringBuffer的核心区别与使用场景。涵盖字符串不可变性、常量池、intern方法、可变字符串构建器的扩容机制及线程安全实现。通过性能测试对比三者差异,并提供最佳实践与高频面试问题解析,助你掌握Java字符串处理精髓。
|
自然语言处理 Java Apache
在Java中将String字符串转换为算术表达式并计算
具体的实现逻辑需要填写在 `Tokenizer`和 `ExpressionParser`类中,这里只提供了大概的框架。在实际实现时 `Tokenizer`应该提供分词逻辑,把输入的字符串转换成Token序列。而 `ExpressionParser`应当通过递归下降的方式依次解析
584 14
|
存储 安全 Java
String StringBuffer StringBuilder 区别详解与对比分析
本文详细解析了Java中String、StringBuffer和StringBuilder的区别,从可变性、线程安全性和性能三个方面进行对比,并结合具体应用场景分析了三者的适用范围。通过性能测试示例展示了它们在字符串拼接时的效率差异,同时提供了实际代码案例帮助理解。总结指出,String适合少量操作或线程安全场景,StringBuffer适用于多线程环境,而StringBuilder则在单线程下性能最优。开发者应根据需求选择合适的类以优化程序性能。文末还附有相关面试资料供参考。
1429 2
|
缓存 安全 Java
《从头开始学java,一天一个知识点》之:字符串处理:String类的核心API
🌱 **《字符串处理:String类的核心API》一分钟速通!** 本文快速介绍Java中String类的3个高频API:`substring`、`indexOf`和`split`,并通过代码示例展示其用法。重点提示:`substring`的结束索引不包含该位置,`split`支持正则表达式。进一步探讨了String不可变性的高效设计原理及企业级编码规范,如避免使用`new String()`、拼接时使用`StringBuilder`等。最后通过互动解密游戏帮助读者巩固知识。 (上一篇:《多维数组与常见操作》 | 下一篇预告:《输入与输出:Scanner与System类》)
489 11
|
Java
Java---StringBuffer()方法的简单应用
Java---StringBuffer()方法的简单应用
290 0
|
Java
Java---StringBuffer()方法的简单应用
描述:在实际应用中,经常回遇到对字符串进行动态修改。这时候,String类的功能受到限制,而StringBuffer类可以完成字符串的动态添加、插入和替换等操作。 1、构造函数。
887 0
|
12月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
597 1