在需要将一个数字类型变量转换得到String 时,经常使之与空字符串连接:
int i = 100 ;
String str = i+"" ;
另外, 还有:
String str1 = String.valueOf(i) ;
String str2 = Integer.toString(i) ;
两种语法。 其中String.valueOf 会调用Integer.toString(i,10)。 因此这里只讨论 i+"" 与 String.valueOf 的差异。
首先,
int i = 223344 ; String str = i + "" ;
反编译得到的字节码是:
0: ldc #2; //int 223344 2: istore_1 3: new #3; //class java/lang/StringBuilder 6: dup 7: invokespecial #4; //Method java/lang/StringBuilder."<init>":()V 10: iload_1 11: invokevirtual #5; //Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder; 14: ldc #6; //String 16: invokevirtual #7; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 19: invokevirtual #8; //Method java/lang/StringBuilder.toString:()Ljava/lang/String; 22: astore_2
而
int i = 223344 ; String str2 = String.valueOf(i);
得到的是:
0: ldc #2; //int 223344 2: istore_1 3: iload_1 4: invokestatic #3; //Method java/lang/String.valueOf:(I)Ljava/lang/String; 7: astore_2
彻底搞清二者的区别势必要进一步最终各自对应方法的具体实现。
其中,String.valueOf 会调用Integer.toString() , 后者将数字的每一位拆分开放到[C里,然后构造一个字符串。 这里有两次对象创建,一次 new char[] ,一次new String 。 后者会copy一份[C的内容(这点从api文档可以得知)。
而StringBuilder也是包装了一个[C , sb.toString 也是new String调用,但是包装[C后的sb对象笔[C要大,这样创建对象使用内存上就多了。 并且 i+"" ,是 append(int) 与 append(String)两次调用,前者也是使用了Integer的getChars相关方法得到[C。
用段简单的代码测试两种用法:
public static void main(String [] a){ int repeate = 100000000 ; String str = null; long start = System.currentTimeMillis(); for(int i=0;i<repeate;i++) str = i + "" ; long t1 = System.currentTimeMillis(); for(int i=0;i<repeate;i++) str = Integer.toString(i); System.out.println("t1:" + (t1 - start) +" t2:" + (t2- t1)); }
输出:
t1:20811 t2:10124 。
鉴于运算次数如此之大, 差别在同一个量级,还不算大。
另外, 通过观察gc情况, 前者明显比后者要频繁(当然这跟分配内存大小有关),也就是说明其内存消耗更大。
结论是, 如果你有代码洁癖,那么使用Integer.toString (或者String.valueOf)吧。
另外,如果习惯了 i + "" 这样的语法也基本不用纠结
相关推荐
Java中Integer.valueOf、parsetInt() String.valueOf的区别和结果代码解析 Java中Integer.valueOf、parsetInt()和String.valueOf都是常用的方法,但是它们之间存在着很多的区别,下面我们将通过代码来解释它们之间...
通常,为了提高代码的可读性和执行效率,推荐使用`String.valueOf()`进行`int`到`String`的转换,以及使用`Integer.parseInt()`进行`String`到`int`的转换。这些方法不仅简单明了,而且性能优越。
使用Java的`Integer.parseInt()`或`Integer.valueOf()`方法时,可以捕获`NumberFormatException`异常,并给出友好提示。 3. **数据绑定的类型转换**:在Spring MVC中,你可以自定义类型转换器。通过实现`org.spring...
Log.i("firstVisibleItem=",String.valueOf(firstVisibleItem)); Log.i("visibleItemCount=",String.valueOf(visibleItemCount)); Log.i("totalItemCount=", String.valueOf(totalItemCount)); //这里要减二,...
public int compare_130(int a,int ... String msg = String.valueOf(a) + " compare with " + String.valueOf(b) + ",the " + String.valueOf(result)+" is bigger"; labelView.setText(msg); } });
通过 Integer.valueOf() 方法可以将 String 转换成 int。例如: int i = Integer.valueOf(my_str).intValue(); 2. 使用 Integer.parseInt() 方法 使用 Integer.parseInt() 方法也可以将 String 转换成 int。例如...
动态生成数的运用 ... String msg = String.valueOf(a) + " compare with " + String.valueOf(b) + ",the " + String.valueOf(result)+" is bigger"; labelView.setText(msg); } });
在 Java 中,可以使用 String.valueOf() 方法将 int 类型的变量转换为 String 类型的变量。例如: int intvar = 1; String stringvar; stringvar = String.valueOf(intvar); 4. float --> String 转换 在 Java 中...
mTvDef.setText(getResources().getString(R.string.text_def)+" : "+String.valueOf(seekBar.getProgress())); break; } case R.id.seekbar_self: { // 设置“与自定义SeekBar对应的TextView”的...
String strI = String.valueOf(i); ``` 对于对象,如果对象非null,`String.valueOf()`实际上就是调用了`toString()`方法。如果对象是null,`String.valueOf()`会返回"null"字符串。 3. **StringBuilder / ...
例如,`String.valueOf(int i)`会将一个整数转换为它的字符串表示,而`String.valueOf(char c)`则会将字符转换为它的字符串形式。这种方法在需要将非字符串数据输出或拼接时非常有用。 除了这两个常见的使用场景,`...
b) 使用String.valueOf():此方法同样适用于所有基本类型,包括int,可以方便地将数值转换为字符串。 c) 运算符+:通过字符串与其他类型的运算符+结合,可以将int转换为字符串。例如: ```java int num = 123;...
b0.set(key,new StringBuffer(prefix1).append(".").append(String.valueOf(i)).append(".").append(String.valueOf(j)).toString()); } else if(ob1 instanceof JSONObject)//如果下级是json...
int i = Integer.valueOf(hexstr, 16).intValue();` ASCII 码到字符 将 ASCII 码转换为字符可以使用以下方法: * 使用 `Character` 类:`int i = 64; String aChar = new Character((char)i).toString();` 字符...
Java实现蜘蛛纸牌
int num = Integer.valueOf(str); ``` 三、`TextUtils.parseInt()` 如果你在使用Android SDK,`TextUtils` 类提供了一个静态方法 `parseInt()`,它可以更安全地处理转换失败的情况。如果字符串无法转换为整数,该...
String fileName = String.valueOf(cd.get(Calendar.YEAR))+String.valueOf(cd.get(Calendar.MONTH)+1)+String.valueOf(cd.get(Calendar.DATE))+ String.valueOf(cd.get(Calendar.MINUTE))+String.valueOf(cd.get...
**解释**:与 `int` 类型到 `String` 类型的转换类似,这里使用了 `String.valueOf()` 方法来将 `float` 类型转换为 `String` 类型。 #### 5. `double` 到 `String` **示例代码**: ```java double doubleVar = ...