当前位置: 首页 > 面试题库 >

x.toString()和x +“”之间的区别

冯开诚
2023-03-14
问题内容

回到大学,我的一位教授。告诉我们要做的只是x + ""从基本类型到字符串的快速转换。
我不记得我在Java和C ++课程中上过什么课(我已经有一段时间没有使用过了),但是我现在在C#/。Net中使用它,这正是我主要在开发的课程在最近。

将int,decimal,float等基本类型使用.toString()over 有优势+""吗?什么情况会.toString()更好?

注意:还向我展示了.toString()该教授,+""因为它比较短,所以我才建议这样做,从那时起我就一直在这样做,而没有质疑它。


问题答案:

恩,作为旁注,它取决于x是多少。如果x是Java中的原始类型,则必须.toString()使用其包装器之一进行调用,例如

Integer.toString(x)

我会说使用toString()通常更好,因为至少在Java中,x +“”表示您要将两个String附加在一起。

像这个例子一样:

 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可以反映出您真正想要的-您想要x的String值,而使用x +“”则有点不妥,并表示-
我希望将x的String值串联起来与“”。

旁注:我无法说出C#会发出的中间字节码,但我想象与此类似。另外,使用C#,您可以像对引用类型一样轻松地对值类型调用.ToString(),因此我认为我的建议也适用。



 类似资料:
  • 但是,这段代码是有效的: 所以我的问题是,import和variable/require方法的作用有什么不同?我想解决困扰我在项目上的导入的任何问题,因为这似乎可能会导致更多的问题。

  • 问题内容: Java中的x 和 x之间有区别吗? 问题答案: 称为预增量,而称为后增量。

  • 本文向大家介绍MongoDB中NumberLong(x)和 NumberLong("x")之间的区别,包括了MongoDB中NumberLong(x)和 NumberLong("x")之间的区别的使用技巧和注意事项,需要的朋友参考一下 NumberLong(x)超出其限制值并四舍五入,而NumberLong("x")没有。 现在,我们将看一个数字,并将其用于NumberLong(x)和Number

  • 我刚刚开始了一个小节点项目,它将与MongoDB接口。然而,我似乎无法正确地导入相关的节点模块,即使我已经通过正确地安装了它们。 例如,以下代码抛出一个错误,告诉我“express没有默认导出”: 但是,此代码的工作原理: 所以我的问题是,import和variable/require方法的功能有什么不同?我想在这个项目上解决困扰我导入的任何问题,因为它似乎可能会在将来引起额外的问题。

  • 问题内容: 在Python中,我不太清楚以下两行代码之间的区别: 要么 他们不是都只是从模块X导入所有内容吗?有什么不同? 问题答案: 之后,你可以参考的东西一样。之后,您可以像一样直接引用事物。因为第二种形式将名称直接导入到本地名称空间,所以如果您从许多模块中导入内容,则可能会产生冲突。因此,不鼓励使用。 您也可以执行,仅将导入到本地名称空间,而不导入中的所有内容。这样做会更好,因为如果您列出了

  • 我很困惑为什么JavaPoint类需要两个int参数,而getX()和getY()方法返回双精度 如果我打电话... 它将返回4.0。如果我打电话 我会得到4分。 有什么原因吗?