Java StringBuffer追加(";)

Java StringBuffer追加(";),java,multithreading,Java,Multithreading,我目前正在使用以下方法重构应用程序: StringBuffer buff1 = new StringBuffer(""); buff1.append("some value A"); buff1.append(""); buff1.append("some value B"); 制作这些代码行的程序员似乎不是个白痴,有什么原因我看不出在StringBuffer中使用append(“”)吗 不,您不需要这个附加(“”)。您也不需要使用字符串初始化StringBuffer新建StringBuff

我目前正在使用以下方法重构应用程序:

StringBuffer buff1 = new StringBuffer("");

buff1.append("some value A");
buff1.append("");
buff1.append("some value B");

制作这些代码行的程序员似乎不是个白痴,有什么原因我看不出在StringBuffer中使用append(“”)吗

不,您不需要这个
附加(“”)
。您也不需要使用字符串初始化StringBuffer<代码>新建StringBuffer()可以正常工作。

不行

如果它们是硬编码的字符串,那么写起来就完全一样了

buff1 = new StringBuffer("some value Asome value B");

顺便说一句,使用StringBuilder比使用StringBuffer更有效(API也是一样的)。

我能想到的唯一原因是可读性(尽管这看起来有点奇怪)

很可能代码是由某个重构工具生成的,而编码人员并不费心删除多余的行。

如果StringBuffer中没有进一步的附加项,则代码应按如下方式重写:

String buff1 = "some value some value B";
这比:

StringBuffer buff1 = new StringBuffer("");

buff1.append("some value A");
buff1.append("some value B");
我之所以说“更安全”,是因为字符串是不可变的,而StringBuffer是不可变的,所以在构造后不会发生字符串意外更改的风险


旁白

“在Java中连接字符串是不好的”这是一个常见的误解。当然,你不应该这样写代码

String buff1 = "foo";    
buff1 += "some value A";
buff1 += "some value B";
这样编写代码是完全可以接受的:

String buff1 = "foo" + "some value A" + "some value B";
在单个语句中执行串联时,代码将优化为:

String buff1 = "foo some value A some value B";

他可能想把
buff1.append(“”)。仅此而已。

buff1.append(“”)与此无关,应该删除。

输出文本现在是否显示为“某个值A某个值B”,因此t现在不可读?不是,但在不同线程之间修改同一StringBuffer实例的频率如何?是,但几乎总是在单个线程中本地使用它,因此不需要线程安全性。我以硬编码字符串为例。。。因为,正如我所说,它在应用程序中的许多不同情况下都会使用。是的,它用于流程集成服务器,在需要线程安全的多线程情况下。仅仅因为您在多线程应用程序中使用StringBuffer并不意味着您必须使用线程安全的数据结构。只有在同一实例被多个线程共享时才需要线程安全。必须喜欢变量名,如
buff1
。编译器难道不能将文本的串联重写为单个文本吗?在运行时将没有可观察到的差异。是的,每个JLS部分3.105,String Literals,这样的常量表达式被改写为一个单一的被交织的字符串。我考虑<代码>字符串Buff1=“一些值A值B”;<代码>比上述代码可读性强得多