我正在一个项目中,所有从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。 问题答案: 请注意,强制转换为和强制