【发布时间】:2015-08-01 17:16:27
【问题描述】:
我一直想知道为什么 JAVA 和 C# 有 String(不可变和线程安全)类,如果它们有 StringBuilder(可变和非线程安全)或 StringBuffer(可变和线程安全)类。 StringBuilder/StringBuffer 不是 String 类的超集吗?我的意思是,如果我可以选择使用StringBuilder/StringBuffer,我为什么要使用String 类?
例如,而不是使用以下,
String str;
为什么我不能总是使用关注?
StringBuilder strb; //or
StringBuffer strbu;
简而言之,我的问题是,如果我将 String 替换为 StringBuffer 类,我的代码将如何生效?此外,StringBuffer 增加了可变性的优势。
【问题讨论】:
-
在某些情况下,使用字符串而不是字符串生成器是有益的。记住字符串是轻量级的。我只是找到一些可以为您提供证据的链接。
-
享元是什么意思?
-
哈?字符串的使用方式很多,拥有这个不可变的类是件好事。 StringBuilder 和 -Buffer 用于创建/构建字符串 - 为什么要使用它们来替换字符串?我不明白你为什么不明白!
-
@Abhishek 看看here。 String 的实习性质使其更加熟练。
-
@JenishRabadiya 知道了。因此,
String将只为每个不同的字符串文字制作一份副本。这可能是个问题,我的意思是如果字符串池被填满会发生什么?