StringBuffer和之间的主要区别是StringBuilder什么?在决定其中任何一个时,是否存在任何性能问题?
为什么他们决定在Java和.NET(以及其他一些语言)中使字符串不可变?他们为什么不让它变得可变?
我在接受采访时被问到为什么String是不可变的
我这样回答:
当我们在java中创建一个字符串时,
String s1="hello";就会在字符串池(hello)中创建一个对象,而s1将指向hello.如果我们再这样做,String s2="hello";那么将不会创建另一个对象但s2将指向,hello因为JVM将首先检查如果字符串池中存在相同的对象. 如果不存在则只创建一个新对象,否则不创建.
现在,如果假设Java允许串可变那么如果我们改变S1到hello world那么S2价值也将hello world因此Java字符串是不可改变的.
如果我的答案是对还是错,请问任何人可以告诉我吗?
我一直想知道为什么JAVA和C#有String(immutable&threadsafe)类,如果它们有StringBuilder(mutable¬ threadsafe)或StringBuffer(mutable&threadsafe)类.上课不是StringBuilder/ StringBuffer超集String吗?我的意思是,String如果我选择使用StringBuilder/ ,我为什么要使用课程StringBuffer?
例如,而不是使用以下,
String str;
Run Code Online (Sandbox Code Playgroud)
为什么我不能总是使用以下?
StringBuilder strb; //or
StringBuffer strbu;
Run Code Online (Sandbox Code Playgroud)
简而言之,我的问题是,如果我String用StringBuffer类替换,我的代码将如何生效?此外,StringBuffer还增加了可变性的优势.