相关疑难解决方法(0)

StringBuilder vs Java中toString()的字符串连接

鉴于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

java string performance stringbuilder concatenation

889
推荐指数
12
解决办法
34万
查看次数

何时在Java中使用StringBuilder

通常认为StringBuilder在Java中使用字符串连接通常是优选的.总是这样吗?

我的意思是:创建一个StringBuilder对象的开销,调用append()方法,最后toString()已经小了,然后将现有的字符串与+运算符连接两个字符串,或者只建议更多(超过两个)字符串?

如果有这样的阈值,它依赖于什么(可能是字符串长度,但以哪种方式)?

最后,您是否会交换+串联的可读性和简洁性,以便StringBuilder在较小的情况下(如两个,三个或四个字符串)的性能?

StringBuilder过时的Java优化技巧以及Java都市神话中,人们提到明确使用常规连接已经过时了.

java string performance

341
推荐指数
6
解决办法
27万
查看次数

String类如何覆盖+运算符?

为什么在Java中,当String是一个类时,你能用+运算符添加字符串?在String.java代码中我没有找到该运算符的任何实现.这个概念是否违反了面向对象?

java string object

127
推荐指数
4
解决办法
3万
查看次数

将Bundle的内容打印到Logcat?

Bundle如果你不记得所有键的名称(甚至只能打印键名称会很酷),是否有一种简单的方法可以将a的内容打印到Logcat?

java android logcat android-bundle

62
推荐指数
6
解决办法
3万
查看次数

StringBuffer append()或String +?

可能重复:
java字符串连接
StringBuilder vs Java中toString()的字符串连接

我读过一些关于append()的文章比+快得多,但是原因是什么,为什么我们会使用+ over append()呢?谢谢!

java performance

2
推荐指数
1
解决办法
524
查看次数

+运算符何时比StringBuilder更快?

在过去,我一直认为你应该使用StringBuilderappend(String)构建带变量的字符串,而不是string += split[i].在什么情况下这是准确的?我问,因为通常,如果我要写下面的内容:

String[] split = args; // command line arguments or whatever
String myString = "";
for (int i = 0; i < split.length; i++) {
    myString += split[i];
}
Run Code Online (Sandbox Code Playgroud)

我的IDE告诉我它应该转换为使用StringBuilder.但是,写这样的东西:

StringBuilder build = new StringBuilder();
build.append("the ").append(build.toString()).append(" is bad").append(randomvar);
build.toString();
Run Code Online (Sandbox Code Playgroud)

当我应该使用String时,IntelliJ实际上使用StringBuilder列为性能问题.它被列为性能问题的事实表明它实际上可能导致问题,而不是仅仅是一点点慢.

我注意到第一个例子是一个循环,第二个例子不是 - 是一个建议用于大量连接的StringBuilder,但是正常连接对于非循环情况更好(这也意味着在循环中运算符+=将被使用,而在外部它可能是一个循环"the " + build.toString() + " is bad" + randomVar- 是+ =问题而不是+?)

java

2
推荐指数
1
解决办法
2949
查看次数

遇到Java中的NoClassDefFoundError

我在Java中运行时遇到错误:

// Test.java
public class Test {
    public static void main(String [] args) throws IOException {
        String a = "123";
        a = a + "456";
        System.out.println(a);
    }
}
Run Code Online (Sandbox Code Playgroud)

通过键入以下命令:

javac Test.java
java Test
Run Code Online (Sandbox Code Playgroud)

它已经报告:

Exception in thread "main" java.lang.NoClassDefFoundError: while resolving class: Test
   at java.lang.VMClassLoader.resolveClass(java.lang.Class) (/usr/lib64/libgcj.so.5.0.0)
   at java.lang.Class.initializeClass() (/usr/lib64/libgcj.so.5.0.0)
   at java.lang.Class.forName(java.lang.String, boolean, java.lang.ClassLoader) (/usr/lib64/libgcj.so.5.0.0)
   at gnu.gcj.runtime.FirstThread.run() (/usr/lib64/libgcj.so.5.0.0)
   at _Jv_ThreadRun(java.lang.Thread) (/usr/lib64/libgcj.so.5.0.0)
   at _Jv_RunMain(java.lang.Class, byte const, int, byte const, boolean) (/usr/lib64/libgcj.so.5.0.0)
   at __gcj_personality_v0 (/home/users/haotianyi/tr/java.version=1.4.2)
   at __libc_start_main (/lib64/tls/libc-2.3.4.so)
   at _Jv_RegisterClasses (/home/users/haotianyi/tr/java.version=1.4.2)
Caused by: …
Run Code Online (Sandbox Code Playgroud)

java

1
推荐指数
1
解决办法
451
查看次数