相关疑难解决方法(0)

当Java Compiler在一行中看到许多String连接时会发生什么?

假设我在Java中有一个表达式,例如:

String s = "abc" + methodReturningAString() + "ghi" + 
                anotherMethodReturningAString() + "omn" + "blablabla";
Run Code Online (Sandbox Code Playgroud)

Java的默认JDK编译器的行为是什么?它只是制作五个连接还是有智能性能技巧?

java string performance concatenation

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

Java如何使用"+"进行字符串连接?

我读到了Java使用+=运算符的方式StringBuilder.
操作是否相同("a" + "b")

java string

10
推荐指数
3
解决办法
2万
查看次数

何时编译器会在StringBuilder上选择StringBuffer进行字符串连接

当我注意到有关字符串连接的这一点时,我正在查看StringJavadoc:

Java语言为字符串连接运算符(+)提供特殊支持,并为其他对象转换为字符串.String通过StringBuilder(或StringBuffer)实现连接

从Java 8 JLS 15.8.1开始,它是编译器的选择(强调我的):

实现可以选择在一个步骤中执行转换和连接,以避免创建然后丢弃中间String对象.为了提高重复字符串连接的性能,Java编译器可以使用StringBuffer类或类似技术来减少通过计算表达式创建的中间String对象的数量.

我制作了一个小程序来查看它编写的内容

public class Tester {

    public static void main(String[] args) {
        System.out.println("hello");
        for (int i = 1; i < 5; i++) {
            String s = "hi " + i;
            System.out.println(s);
        }
        String t = "me";
        for (int i = 1; i < 5; i++) {
            t += i;
            System.out.println(t);
        }
        System.out.println(t);
    }
}
Run Code Online (Sandbox Code Playgroud)

运行时的输出javap -c Tester显示StringBuilder正在使用的输出:

Compiled …
Run Code Online (Sandbox Code Playgroud)

java java-8

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

标签 统计

java ×3

string ×2

concatenation ×1

java-8 ×1

performance ×1