回到大学时,我的一位教授。教我们只做 x + ""
作为从基本类型到字符串的快速转换。
我不记得它在哪个类(class),我让他参加了一些 Java 和 C++ 类(class)(我已经有一段时间没用过了),但我现在在 C#/.Net 中使用它,这是我主要开发的最近。
对于 int、decimal、float 等基本类型,使用 .toString()
优于 +""
是否有优势?
什么情况下 .toString()
会更好?
注意:我也看到了 .toString()
,那个教授刚刚推荐了 +""
因为它更短,从那时起我就这样做了,没有质疑
最佳答案
好吧,作为旁注,这取决于 x 是什么。如果 x 是 Java 中的原语,则必须使用其包装器之一调用 .toString()
,例如
Integer.toString(x)
我会说使用 toString() 通常更好,因为 x + "",至少在 Java 中,表示您想要将两个字符串附加在一起。
就像这个例子:
public static void main(String[] args)
{
int x = 3;
String s = x + "";
}
在字节码中,结果是:
public static void main(java.lang.String[]);
Code:
0: iconst_3
1: istore_1
2: new #2; //class java/lang/StringBuilder
5: dup
6: invokespecial #3; //Method java/lang/StringBuilder."<init>":()V
9: iload_1
10: invokevirtual #4; //Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
13: ldc #5; //String
15: invokevirtual #6; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
18: invokevirtual #7; //Method java/lang/StringBuilder.toString:()Ljava/lang/String;
21: astore_2
22: return
所以它必须创建一个 StringBuilder 来将 ""和 x 的字符串值附加在一起。虽然效率损失并不大,但仅使用 toString 函数并不过分。
与使用 toString 比较:
public static void main(String[] args)
{
int x = 3;
String s = Integer.toString(x);
}
结果如下:
public static void main(java.lang.String[]);
Code:
0: iconst_3
1: istore_1
2: iload_1
3: invokestatic #2; //Method java/lang/Integer.toString:(I)Ljava/lang/String;
6: astore_2
7: return
虽然这可能只是我的意见,但使用 .toString 反射(reflect)了您真正想要的 - 您想要 x 的字符串值,而使用 x + ""有点乱七八糟,并且说 - 我想要字符串值x 与“”连接。
旁注: 我不能谈论 C# 会发出的中间字节码,但我想象与此类似的东西。另外,使用 C#,您可以像调用引用类型一样轻松地对您的值类型调用 .ToString(),因此我认为我的建议同样适用。
关于c# - x.toString() 和 x +""之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4730142/