问:Java 中 Integer 转 String 的方式有哪些?其转换原理又是怎么样的呢?简单说说?
答:方式如下。
Integer sum = 1024;
//常见转换方式如下
String s1 = sum.toString(); //方式一
String s2 = Integer.toString(sum); //方式二
String s3 = String.valueOf(sum); //方式三
其中方式一与方式二的原理本质一致,具体源码解析如下:
public String toString() {
return toString(value);
}
public static String toString(int i) {
if (i == Integer.MIN_VALUE)
return "-2147483648";
int size = (i < 0) ? stringSize(-i) + 1 : stringSize(i);
char[] buf = new char[size];
getChars(i, size, buf);
return new String(buf, true);
}
可以看到 toString() 和 toString(int i) 的本质一样,通过这两种方式可以把整数(包括0)转化为字符串,但是 Integer 如果是 null 的话就会报空指针异常(因为 toString(int) 会触发 Integer 的自动拆箱,调用其成员方法 intValue())。
方式三对应的源码如下:
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
public String toString() {
return getClass().getName() + "@" +
Integer.toHexString(hashCode());
}
可以看到,当 Integer 是 null 的时候返回的 String 是字符串 "null" 而不是 null,也不会报空指针。
如上解释了 Integer 转 String 的几种方式,不过有一种情况还要留意,就是 String.valueOf(int i) 方法与 String.valueOf(Object i) 的区别,如下:
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
public static String valueOf(int i) {
return Integer.toString(i);
}