发布日期:2018-03-26
我如何将一个整型变量转换成字符串?+ 查看更多
我如何将一个整型变量转换成字符串?
+ 查看更多
发布日期:2018-03-10 11:42
分类:JAVA
浏览次数:259
如下:在一个项目中,我将整型转换成字符串都是使用如下方式:
int i = 5; String strI = "" + i;
我不太熟悉java,这种方式是常用的还是有错误的?我想知道。
连接的方式也能运行,但这不是常规方法,作者不知道以上这两种方法是极不好的(或许其他的也不知道)。
在java中,当时用字符串是,+是有特殊含义的(看文档),可以将你的代码翻译成如下代码:
为了回答Grodriguez's的评论,不,在这种情况下,编译器不优化空字符串:
回答
常用的方法是Integer.toString(i)或者String.valueOf(i)。连接的方式也能运行,但这不是常规方法,作者不知道以上这两种方法是极不好的(或许其他的也不知道)。
在java中,当时用字符串是,+是有特殊含义的(看文档),可以将你的代码翻译成如下代码:
StringBuilder sb = new StringBuilder(); sb.append(""); sb.append(i); String strI = sb.toString();在编译时,它的效率是低下的,sb.append()在结尾时会调用Integer.getChars(),这是Integer.toString()任何时候都会做的。
为了回答Grodriguez's的评论,不,在这种情况下,编译器不优化空字符串:
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."初始化StringBuilder":()V 4: return public static void main(java.lang.String[]); Code: 0: iconst_5 1: istore_1
2: new #2; //class java/lang/StringBuilder 5: dup 6: invokespecial #3; //Method java/lang/StringBuilder."加入空字符串":()V
9: ldc #4; //String 11: invokevirtual #5; //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 }JDK9的一个目标是改变这种行为并继续努力。