gpt4 book ai didi

java - 当 Java 编译器在一行中看到许多字符串连接时会发生什么?

转载 作者:IT老高 更新时间:2023-10-28 21:06:16 25 4
gpt4 key购买 nike

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

String s = "abc" + methodReturningAString() + "ghi" + 
anotherMethodReturningAString() + "omn" + "blablabla";

Java 的默认 JDK 编译器的行为是什么?它只是进行五个连接还是完成了一个聪明的性能技巧?

最佳答案

它生成等价于:

String s = new StringBuilder("abc")
.append(methodReturningAString())
.append("ghi")
.append(anotherMethodReturningAString())
.append("omn")
.append("blablabla")
.toString();

预连接静态字符串(即 "omn"+ "blablabla") 足够聪明。如果您愿意,您可以将 StringBuilder 的使用称为“性能技巧”。这绝对比执行五个连接导致四个不必要的临时字符串更好。此外,使用 StringBuilder 是(我认为)Java 5 的性能改进;在此之前,使用的是 StringBuffer。

编辑:正如评论中所指出的,静态字符串只有在连接的开头才会被预先连接。否则会破坏操作顺序(尽管在这种情况下,我认为 Sun 可以证明这一点)。因此,鉴于此:

String s = "abc" + "def" + foo() + "uvw" + "xyz";

它会这样编译:

String s = new StringBuilder("abcdef")
.append(foo())
.append("uvw")
.append("xyz")
.toString();

关于java - 当 Java 编译器在一行中看到许多字符串连接时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1296571/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com