我正在阅读“ 更好,更快,更轻便的Java ”(作者Bruce Tate和Justin
Gehtland),并且熟悉敏捷类型团队的可读性要求,例如Robert
Martin在其干净的编码书中讨论的内容。在我现在所在的团队中,已明确告知我不要使用+
运算符,因为它会在运行时创建额外的(和不必要的)字符串对象。
但是,这篇写于‘04的文章讨论了对象分配如何与10条机器指令相关。(基本上免费)
它还讨论了GC如何在这种环境下帮助降低成本。
什么是使用之间的实际性能的权衡+
,StringBuilder
还是StringBuffer
?(就我而言,这StringBuffer
仅是因为我们仅限于Java
1.4.2。)
StringBuffer
正如Tate的书中的几个例子所示,对我来说,结果导致丑陋,可读性差的代码。并且StringBuffer
是线程同步的,这似乎具有其自己的成本,该成本超过了使用+
运算符的“危险”
。
有想法/意见吗?
使用String
串联StringBuilder
将由编译器转换为操作。
要查看编译器的工作方式,我将举一个示例类,对其进行编译,然后用jad对其进行反编译,以查看生成的字节码是什么。
原始班级:
public void method1() {
System.out.println("The answer is: " + 42);
}
public void method2(int value) {
System.out.println("The answer is: " + value);
}
public void method3(int value) {
String a = "The answer is: " + value;
System.out.println(a + " what is the question ?");
}
反编译类:
public void method1()
{
System.out.println("The answer is: 42");
}
public void method2(int value)
{
System.out.println((new StringBuilder("The answer is: ")).append(value).toString());
}
public void method3(int value)
{
String a = (new StringBuilder("The answer is: ")).append(value).toString();
System.out.println((new StringBuilder(String.valueOf(a))).append(" what is the question ?").toString());
}
method1
编译器上执行编译时的操作。method2
该String
级联相当于手动使用StringBuilder
。method3
该String
级联的编译器创建第二个肯定是不好的StringBuilder
,而不是重用前一个。因此,我的简单规则是,除非您需要再次串联结果,否则串联是好方法:例如在循环中或需要存储中间结果时。
问题内容: 请告诉我一个实时的情况来比较String,StringBuffer和StringBuilder? 问题答案: 如果使用的是JGraph,则应尝试为算法设计的。它的功能之一是使用库进行可视化。它仍然开发,但相当稳定。我前段时间分析了算法的复杂性。其中一些并不是最快的,但是如果你要自己实现它们并需要显示图形,那么它可能是最佳选择。我真的很喜欢使用它的API,当时我不得不快速编写一个在图形上
问题内容: 使用此代码: 当我使用StringBuilder运行代码时,出现错误消息 尝试了StringBuffer,它可以工作。StringBuffer对象的内容被编译为“ Java和Eclipse ..”。 } 问题答案: 确实 有一个接受a 作为参数 的构造函数,并且 确实 有一个方法(由于实现了它必须实现)。 结论:这是您的IDE中的一个不幸,它没有导入正确的。您使用的另一个库具有不幸的“
主要内容:总结在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。String 类是不可变类,即一旦一个 String 对象被创建以后,包含在这个对象中的字符序列是不可改变的,直至这个对象被销毁。 Java 提供了两个可变字符串类 StringBuffer 和 StringBuilder,中文翻译为“字符串缓冲区”。 StringBuilder 类是 JDK 1.5 新增的类,
本文向大家介绍Java中StringBuffer和StringBuilder区别,包括了Java中StringBuffer和StringBuilder区别的使用技巧和注意事项,需要的朋友参考一下 早先用Java的时候,知道有个类叫StringBuffer,用来拼接较长的字符串。转到C#之后,也有一个似类功能的类叫作StringBuilder,简写都是sb,非常好记。 再后来转移回Java的时候,发
本文向大家介绍辨析Java中的String与StringBuffer及StringBuilder字符串类,包括了辨析Java中的String与StringBuffer及StringBuilder字符串类的使用技巧和注意事项,需要的朋友参考一下 1 String String:字符串常量,字符串长度不可变。 2 StringBuffer StringBuffer:字符串变量(Synchronized
问题内容: 和之间的主要区别是什么?在决定其中任何一个时是否存在性能问题? 问题答案: 是同步的,不是。