一、String与整型间的转换(int、long、integer等都属于整型)
1.string2int:
1)使用Integer.parseInt(String)方法
String str = "111";
Integer num = Integer.parseInt(str);
方法源码:
public static int parseInt(String s) throws NumberFormatException {
return parseInt(s,10);
}
目的:将字符串参数解析为有符号十进制整数
注意:字符串中的字符必须都是十进制数字,但第一个字符可以是减号'-' 表示负值,或者加号'+' 表示正数。
String str = "-111";
Integer num = Integer.parseInt(str);
String str = "+111";
Integer num = Integer.parseInt(str);
2)使用Integer.valueOf(String)方法
String str = "111";
Integer num = Integer.valueOf(str);
方法源码:
public static Integer valueOf(String s) throws NumberFormatException {
return Integer.valueOf(parseInt(s, 10));
}
3)方法解析:
通过方法的源码可以看到,两中方法实质上都是通过调用 parseInt(String s, int radix)来实现的;
但valueOf(String s)并未直接调用parseInt(String s, int radix)方法,而是以Integer.valueOf(parseInt(s, 10))的形式又进行了一次嵌套,间接进行了parseInt(String s, int radix)方法的调用,因此在效率上会比parseInt(String s)中直接调用parseInt(String s, int radix)方法低一些;
如果程序对效率的要求严格且需要进行类型转换的的地方较多,推荐使用
parseInt(String s)方法进行转换
2.int2string:
1)Integer.toString(int i)
Integer num = 111;
String str = Integer.toString(num);
方法源码:
@IntrinsicCandidate
public static String toString(int i) {
int size = stringSize(i);
if (COMPACT_STRINGS) {
byte[] buf = new byte[size];
getChars(i, size, buf);
return new String(buf, LATIN1);
} else {
byte[] buf = new byte[size * 2];
StringUTF16.getChars(i, size, buf);
return new String(buf, UTF16);
}
}
2)String.valueOf(int i)
Integer num = 111;
String str = String.valueOf(num);
方法源码:
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
obj.toString()方法:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
3)方法解析:
通过源码可以看到,在Integer.toString(int i)方法中直接编译了int类型转换为string类型的具体实现过程;
在String.valueOf(int i)方法中,是通过调用obj.toString()方法来实现的,而obj.toString()方法又最终通过Integer.toHexString(hashCode())方法来实现最终的转换;
所以在效率上Integer.toString(int i)显然比String.valueOf(int i)要高,所以若工程追求执行效率,推荐使用Integer.toString(int i)来进行参数转换。