gpt4 book ai didi

java - String.format() 与 "+"运算符

转载 作者:IT老高 更新时间:2023-10-28 20:45:07 25 4
gpt4 key购买 nike

基本的字符串连接操作应该使用什么?

String randomString = "hello " + userName + " how are you" ?

String randomString = String.format("hello %s how are you ?",userName);

我觉得 String.format() 可以更好地了解输出字符串。但是,使用其中任何一种方法实际上利弊是什么?

在字符串文字池中是否有任何性能或孤立条目。

编辑:我说的是字符串中的多个参数,而不仅仅是一个。大约 5 +。

额外问题:也请分享您对哪个应该实际使用?这些或第三个中的任何一个......! ?

最佳答案

如果您只追求性能,我相信使用 StringBuilder/StringBuffer 是构建字符串的最有效方式。即使 Java 编译器足够聪明,可以将大部分字符串连接转换为等效的 StringBuilder

如果您正在寻找可读性,我认为 String.format 东西会更清晰,这也是我使用的,除非我需要依赖高性能。

因此,如果您的主要关注点不是性能,这意味着此代码不在经常调用的路径中,您可能更喜欢使用 String.format,因为它可以更好地了解结果字符串(如你所说)。

此外,使用 String.format 可以让您使用格式的东西,这意味着您可以使用它来填充字符串、格式化数字、日期等等,如果使用简单的连接。

编辑 为 Chuu:

使用 JAD ,可以看到如下代码:

public class Test {
public static void main(String[] args) {
String str = "a" + "b" + "c";
String str2 = "foo" + str + "bar" + str;
System.out.println(str2);
}
}

反编译后的样子:

public class Test {
public static void main(String[] args) {
String str = "abc";
String str2 = new StringBuilder("foo").append(str).append("bar").append(str).toString();
System.out.println(str2);
}
}

也可以使用 javap 实用程序找到证明,该实用程序将在 .class 文件下显示 Java 字节码:

public static void main(java.lang.String[] args);
0 ldc <String "abc"> [16]
2 astore_1 [str]
3 new java.lang.StringBuilder [18]
6 dup
7 ldc <String "foo"> [20]
9 invokespecial java.lang.StringBuilder(java.lang.String) [22]
12 aload_1 [str]
13 invokevirtual java.lang.StringBuilder.append(java.lang.String) : java.lang.StringBuilder [25]
16 ldc <String "bar"> [29]
18 invokevirtual java.lang.StringBuilder.append(java.lang.String) : java.lang.StringBuilder [25]
21 aload_1 [str]
22 invokevirtual java.lang.StringBuilder.append(java.lang.String) : java.lang.StringBuilder [25]
25 invokevirtual java.lang.StringBuilder.toString() : java.lang.String [31]
28 astore_2 [str2]
29 getstatic java.lang.System.out : java.io.PrintStream [35]
32 aload_2 [str2]
33 invokevirtual java.io.PrintStream.println(java.lang.String) : void [41]
36 return

关于java - String.format() 与 "+"运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13815384/

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