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

Java如何从int转换为String?

袁卓
2023-03-14
问题内容

我正在一个项目中,所有从int到的转换String都是这样完成的:

int i = 5;
String strI = "" + i;

我对Java不熟悉。我想这是通常的做法还是出了什么问题?


问题答案:

正常的方法是Integer.toString(i)String.valueOf(i)

串联可以工作,但是这是非常规的,可能会产生难闻的气味,因为这表明作者不了解上述两种方法(他们可能还不知道什么?)。

当与字符串一起使用时,Java对+运算符有特殊的支持(请参阅文档),它将你发布的html" target="_blank">代码转换为:

StringBuilder sb = new StringBuilder();
sb.append("");
sb.append(i);
String strI = sb.toString();

在编译时。它的效率稍低(sb.append()最终会调用Integer.getChars(),这Integer.toString()反正会完成),但是它可以工作。

要回答Grodriguez的评论:**不,在这种情况下,编译器不会优化空字符串-请看:

simon@lucifer:~$ cat TestClass.java
public class TestClass {
  public static void main(String[] args) {
    int i = 5;
    String strI = "" + i;
  }
}
simon@lucifer:~$ javac TestClass.java && javap -c TestClass
Compiled from "TestClass.java"
public class TestClass extends java.lang.Object{
public TestClass();
  Code:
   0:    aload_0
   1:    invokespecial    #1; //Method java/lang/Object."<init>":()V
   4:    return

public static void main(java.lang.String[]);
  Code:
   0:    iconst_5
   1:    istore_1

初始化StringBuilder:

   2:    new    #2; //class java/lang/StringBuilder
   5:    dup
   6:    invokespecial    #3; //Method java/lang/StringBuilder."<init>":()V

追加空字符串:

   9:    ldc    #4; //String
   11:    invokevirtual    #5; //Method java/lang/StringBuilder.append:
(Ljava/lang/String;)Ljava/lang/StringBuilder;

追加整数:

   14:    iload_1
   15:    invokevirtual    #6; //Method java/lang/StringBuilder.append:
(I)Ljava/lang/StringBuilder;

提取最终字符串:

   18:    invokevirtual    #7; //Method java/lang/StringBuilder.toString:
()Ljava/lang/String;
   21:    astore_2
   22:    return
}

有一项针对JDK 9 的提议和正在进行的更改此行为的工作。



 类似资料:
  • 问题内容: 我想在Golang中将int转换为hex。在strconv中,有一种将字符串转换为十六进制的方法。是否有类似的方法从int获取十六进制字符串? 问题答案: 由于hex是Integer文字,因此您可以使用,和或格式向fmt包询问该整数的字符串表示形式。参观游乐场 输出:

  • 问题内容: 我对Java比较陌生,并且习惯于C#中的泛型,因此在此代码方面有些挣扎。基本上,我想要一个通用的方法来通过键来获取存储的Android偏好设置,尽管该代码很丑陋,但当它抛出ClassCastException异常时,它适用于布尔值而不是整数。谁能告诉我为什么这是错误的,也许可以帮助我改善整个例程(使用通配符?)? 我的呼叫代码是: 这是getInt()的Android代码: 我尝试了多

  • 因此,我必须制作一个卡片项目,该项目需要一个字符串,例如“Hearts的六个”,并根据数字(六)和套装(Hearts)的值将其转换为整数数组。关于如何让java获取字符串“6”并输出6,我遇到了一个难题。。。有什么提示吗? 编辑:梅花=0;黑桃=3;红心=2;钻石=1;

  • 问题内容: 我是Java的新手,想知道double转换为int cast如何工作吗?我知道,只需将低32位转换为int就很容易了,但是将double(64位)转换为int(32位)呢?来自二进制的double中的那64位是Double- precision浮点格式(Mantissa),那么它如何在内部转换为int? 问题答案: 所有这些都记录在JLS的5.1.3节中。 第一步,将浮点数转换为lon

  • 问题内容: 我生成了一个安全的随机数,并将其值放入一个字节中。这是我的代码。 但是我遇到一个错误: 问题答案: 您的数组是基元,但是您正在尝试对其调用方法。 您无需做任何显式操作即可将a转换为,只需: …因为这不是垂头丧气。 请注意,-to- 转换的默认行为是保留值的符号(请记住,在Java中是带符号的类型)。因此,例如: 如果您想到的是无符号(156)而不是有符号(-100),那么从Java 8

  • 问题内容: 我一直在这里找到问题,并且Google的人们遇到了麻烦,而不是遇到了其他麻烦。但我敢肯定,我不是以前已经从去碰到这种情况的唯一一个到。 我发现的唯一其他答案是“首先将其设置为Long”,这实际上并没有解决这个问题。 我最初尝试投射,但得到了“ ” 如您所料,我有点困惑,我被困住了,因为有些内容以形式出现,而我要存储其信息的实体要求序列号为Long。 问题答案: 请注意,强制转换为和强制