鉴于toString()下面的两个实现,首选哪一个:
public String toString(){
return "{a:"+ a + ", b:" + b + ", c: " + c +"}";
}
Run Code Online (Sandbox Code Playgroud)
要么
public String toString(){
StringBuilder sb = new StringBuilder(100);
return sb.append("{a:").append(a)
.append(", b:").append(b)
.append(", c:").append(c)
.append("}")
.toString();
}
Run Code Online (Sandbox Code Playgroud)
?
更重要的是,鉴于我们只有3个属性,它可能没有什么区别,但你会在什么时候从+concat 切换到 StringBuilder?
这就是任务:给定一个字符串,返回一个字符串,其中原始字符中的每个字符都有两个字符。
而且我不明白为什么它的输出是数字而不是字母,我试过不起作用?
public String doubleChar(String str) {
String s = "";
for(int i=0; i<str.length(); i++){
s += str.charAt(i) + str.charAt(i);
}
return s;
}
Run Code Online (Sandbox Code Playgroud)
预期:
doubleChar(“ The”)吗?“ Tthhee”
doubleChar(“ AAbb”)吗?“ AAAAbbbb”
输出:
doubleChar(“ The”)吗?“ 168208202”
doubleChar(“ AAbb”)吗?“ 130130196196”
据我所知,当我做String baz = "foo" + "bar" + "123"Java编译器时,内部用一个替换表达式StringBuilder.然而,我们的Java老师告诉我们,总是StringBuilder明确使用明确的...
我是否正确假设我只需要在连接内部循环时显式使用StringBuilder,如Stack Overflow问题字符串生成器与字符串连接的答案中所示?是否有其他情况下,你应该明确地使用StringBuilder,而不是+或+=?
我正在阅读此文档页面,http://developer.android.com/reference/android/util/Log.html.
这部分引起了我的注意:
提示:当你拨打电话时不要忘记
Log.v(TAG, "index=" + i);当您构建要传递给Log.d的字符串时,编译器使用StringBuilder并且至少发生三次分配:StringBuilder本身,缓冲区和String对象.实际上,还有另一个缓冲区分配和复制,对gc的压力更大.这意味着如果您的日志消息被过滤掉,那么您可能正在进行大量工作并产生大量开销.
这意味着Android编译器正在采用字符串连接(+)并将它们转换为StringBuilder和append语句.
我的假设是正确的还是更好地手动使用StringBuilder而不是字符串连接?