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

字符串valueOf与空字符串的串联

弘阳德
2023-03-14
问题内容

我正在从事Java代码优化。我不清楚String.valueOf+""符号之间的区别:

int intVar = 1;
String strVar = intVar + "";
String strVar = String.valueOf(intVar);

第2行和第3行有什么区别?


问题答案:
public void foo(){
int intVar = 5;
String strVar = intVar+"";    
}

这种方法使用StringBuilder创建结果字符串

public void foo();
  Code:
   0:   iconst_5
   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/lan
g/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/la
ng/String;
   21:  astore_2
   22:  return
public void bar(){
int intVar = 5;
String strVar = String.valueOf(intVar);
}

此方法仅调用的静态方法String来获取int的String版本

public void bar();
  Code:
   0:   iconst_5
   1:   istore_1
   2:   iload_1
   3:   invokestatic    #8; //Method java/lang/String.valueOf:(I)Ljava/lang/Stri
ng;
   6:   astore_2
   7:   return

依次调用
Integer.toString()



 类似资料:
  • 对性能是否有影响? 不同Java版本的行为是否有差异?

  • 问题内容: 这是以前有关Java中的String初始化的一些问题的后续问题。 在用Java进行了一些小测试之后,我面临以下问题: 为什么我可以执行此语句 当str2一个String对象初始化为,但我不能调用方法toString()上str2?那么Java如何将空字符串对象和字符串文字串联起来? 顺便说一句,我还尝试将一个初始化为null和字符串文字的Integer连接起来,”a_literal_s

  • 简介 我只介绍了表和数,因为它们在Scheme中最为常用。然而,Scheme也有像字符(Character)、字符串(String)、符号(Symbol)、向量(Vector)等的其它数据类型,我将在11到14章节中介绍它们。 字符 在某个字符前添加#\来表明该物是一个字符。例如,#\a表示字符a。字符#\Space、#\Tab、#\Linefeed和#\Return分别代表空格(Space)、制

  • 问题内容: 在Python中,什么时候以及什么时候使用字符串连接与字符串替换比较容易。由于字符串连接的性能有了很大的提高,这(成为更多)是一种风格上的决定,而不是一种实际的决定吗? 举一个具体的例子,如何处理灵活的URI: 编辑:也有关于加入字符串列表和使用命名替换的建议。这些是中心主题的变体,即在什么时候做正确的方法?感谢您的回复! 问题答案: 根据我的机器,连接的速度(明显)更快。但是从风格上

  • 问题内容: 空字符串()和空字符串()有什么区别? 这就是我所拥有的: 这是什么意思? 问题答案: 表示将空值分配给。在这种情况下,与相同,将按预期产生。 表示将()或“完全没有值”分配给。因此,这与相同,它将产生一个,因为您无法在Java中对变量(指针或类似物)调用方法。 还有一点,声明 实际上具有与以下功能相同的效果: 鉴于 如前所述,是另一回事。

  • 问题内容: 以下语句, 产生输出。 但是,以下内容 产生。 区别在哪里? 问题答案: 您会因为操作符优先级和字符串转换的结合而看到此行为。 JLS 15.18.1 指出: 如果只有一个操作数表达式的类型为String,则对另一操作数执行字符串转换(第5.1.11节),以在运行时生成字符串。 因此,第一个表达式中的右侧操作数将隐式转换为字符串: 但是对于第二个表达式,必须将复合赋值运算符与一起考虑。