sting stingbuffer 区别 总结

本文解析了Java中String与StringBuffer的区别,重点说明String为何是不可变的,以及StringBuffer如何实现字符串的修改。通过实例展示了在进行字符串拼接时,JVM是如何创建临时对象并进行内存管理的。
问:我看概念上说的是:
“这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。”

我不明白,为啥String不可更改呢?
String s = "sss";
s = "ddd";
这样编译是能捅过的,可以更改啊
String s = "sss"; 不可变是说对象new String("sss")是不可变的,你写s="ddd",创建了一个新的new String("ddd")对象,并让引用s 指向这个对象的地址,原来的sss被就被抛弃了。
答:String s = "sss";
s+= "ddd";
这样也是可以的,是不是s也是可变的呢?
实际上JVM是生成了一个临时对象BufferString,将两个字符串拼接后再保存为新对象,然后将引用s指向新对象。

在这一个简单的一次拼接过程中,我们让程序创建了四个对象:两个待拼接的String,一个临时StringBuffer,和最后将StringBuffer转型成为的String--它当然不是最初的sss了,这个引用的名称没变,但它指向了新的String对象。
### 关于 Sting 的概念澄清 提到的 Sting 并不是一个标准术语,在不同上下文中可能有不同的含义。以下是几个不同的解释: #### 1. STING 算法 STING (Statistical Information Grid) 是一种基于网格的空间数据分析技术[^3]。这种算法通过将空间划分为多个层次的矩形区域(网格),并计算每个区域内的一些统计数据来进行聚类分析。 #### 2. Java 中的 `String` 类及其变体 在Java编程语言中,存在名为 `String` 和 `StringBuilder` 的类[^4]。值得注意的是,这里并没有叫做 `Sting` 的官方类名。如果指的是字符串处理,则应关注这两个具体的类: - **String**: 不可变字符序列。 - **StringBuilder**: 可变字符序列,适用于频繁修改的情况;相比 `StringBuffer` 更高效但不是线程安全的。 对于字符串实例化的两种方式也进行了描述:直接赋值 `"123"` 或者使用构造函数 `new String("123")`[^5]。前者会优先尝试重用常量池中的已有对象,后者总是创建新的对象实例。 #### 3. 错误拼写可能性 考虑到可能存在拼写的错误,“sting”可能是想表达其他的概念或者是对上述某些主题的兴趣。如果是关于特定库或框架内的功能,请提供更多背景信息以便给出更精确的回答。 ```java // 创建不可变字符串的例子 String strImmutable = "example"; strImmutable += "-modified"; // 这会产生一个新的字符串对象 // 使用 StringBuilder 来构建可变字符串 StringBuilder sb = new StringBuilder(); sb.append("example").append("-modified"); ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值