假设字符串a和b:
a += b
a = a.concat(b)
Run Code Online (Sandbox Code Playgroud)
引擎盖下,它们是一样的吗?
这里以concat反编译为参考.我希望能够反编译+运算符以查看它的作用.
public String concat(String s) {
int i = s.length();
if (i == 0) {
return this;
}
else {
char ac[] = new char[count + i];
getChars(0, count, ac, 0);
s.getChars(0, i, ac, count);
return new String(0, count + i, ac);
}
}
Run Code Online (Sandbox Code Playgroud) 通常认为StringBuilder在Java中使用字符串连接通常是优选的.总是这样吗?
我的意思是:创建一个StringBuilder对象的开销,调用append()方法,最后toString()已经小了,然后将现有的字符串与+运算符连接两个字符串,或者只建议更多(超过两个)字符串?
如果有这样的阈值,它依赖于什么(可能是字符串长度,但以哪种方式)?
最后,您是否会交换+串联的可读性和简洁性,以便StringBuilder在较小的情况下(如两个,三个或四个字符串)的性能?
StringBuilder在过时的Java优化技巧以及Java都市神话中,人们提到明确使用常规连接已经过时了.
我很好奇两者之间有什么区别.
我理解字符串池的方式是这样的:
这会在字符串池中创建3个字符串对象,其中2个字符串对象将丢失.
String mystr = "str";
mystr += "end";
Run Code Online (Sandbox Code Playgroud)
这不会在字符串池中创建3个对象吗?
String mystr = "str";
mystr = mystr.concat("end")
Run Code Online (Sandbox Code Playgroud)
我知道StringBuilder和StringBuffer在内存使用方面更有效率,因为要进行大量的连接.我只是好奇,如果在内存使用方面+运算符和concat之间有任何区别.
我一直在阅读我的团队中其他开发人员生成的代码,他们似乎更喜欢使用+=String连接,而我更喜欢使用,.concat()因为它感觉更容易阅读.
我正在尝试准备一个关于为什么使用.concat()更好的论点,我想知道,两者之间的效率有什么不同吗?
我们应该选择哪个选项?
public class Stuff {
public static void main(String[] args) {
String hello = "hello ";
hello += "world";
System.out.println(hello);
String helloConcat = "hello ".concat("world");
System.out.println(helloConcat);
}
}
Run Code Online (Sandbox Code Playgroud) 我当前的类SeriesCircuitclass包含两个构造函数:
public SeriesCircuit(Circuit input1, Circuit input2)
{
this.circuit1 = input1;
this.circuit2 = input2;
}
public SeriesCircuit(ParallelCircuit parallelCircuit, Circuit circuit1)
{
this.parallelCircuit = parallelCircuit;
this.circuit1 = circuit1;
}
Run Code Online (Sandbox Code Playgroud)
使用该.toString()方法,我可以打印出第一个构造函数的值:
public String toString()
{
return circuit1.getResistance() + " + " + circuit2.getResistance();
}
Run Code Online (Sandbox Code Playgroud)
注意:.getResistance()get 返回的值只是双倍,所以示例输出就像这个字符串:2.0 + 3.0.
我的问题是,由于我有两个提供两种不同输入类型的构造函数,我如何只覆盖一个.toString()以输出两种不同类型的构造函数输入?
例如,在我的主要内容中,我这样做:
SeriesCircuit s1 = new SeriesCircuit(new Circuit(2.0), new Circuit(3.0));
SeriesCircuit s2 = new SeriesCircuit(new ParallelCircuit(s1, new Circuit(4.0)), new Circuit(1.0));
我可以s1使用System.out.println(s1)很好的打印出来,但是由于我从未 …
我在一个循环中连接一个字符串,但它需要很长时间,为什么呢?
for (String object : jsonData) {
counter++;
finalJsonDataStr += object;
}
Run Code Online (Sandbox Code Playgroud)
变量object是一块JSON,最多70个字符,循环大约50k次.
我理解一些人的建议StringBuffer,StringBuilder但是这个链接说,它没有性能改进:StringBuilder vs Java中toString()的字符串连接