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”;<代码>比上述代码可读性强得多