Java中的valueOf和parse...
String的valueOf()
将任何对象转换成字符串类型。
总共有9个重载方法,
对于参数为char,都是通过new String()返回
对于参数为boolean,将返回对应的字符串:true或者false
对于后4个方法,都是调用该对象类型的toString()返回
下面说一下参数为Object的方法
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
public static void main(String[] args) {
Objects obj = null;
String s1 = String.valueOf(obj);
System.out.println("s1:" + s1);
String s2 = String.valueOf(null);
System.out.println("s2:" + s2);
}
执行main方法后,结果为s1:null 和NPE
可见
- valueOf()的参数如果是一个Object的引用,而这个引用的指向为null,将返回一个字符串null
- valueOf()的参数如果是null,而不是一个空的引用,将会报NPE
Double的转换
Double.valueOf()
public static Double valueOf(String s) throws NumberFormatException {
return new Double(parseDouble(s));
}
public static Double valueOf(double d) {
return new Double(d);
}
入参为字符串类型的数字(不能是空,也不能是null)或者double基本类型
出参为对象类型Double(不可能出现null)
如果参数为字符串,会调用parseDouble()方法
Double.parseDouble()
public static double parseDouble(String s) throws NumberFormatException {
return FloatingDecimal.parseDouble(s);
}
入参为字符串类型的数字(不能是空,也不能是null)
出参为基本类型double(不可能出现null)
区别
-
从参数上说
Double.valueOf:参数可以是 double,也可以是 String。
Double.parseDouble:参数只能是 String。 -
从结果上说
Double.valueOf:返回 Double。
Double.parseDouble:返回 double。
Integer的转换
Integer.valueOf()
public static Integer valueOf(String s) throws NumberFormatException {
return Integer.valueOf(parseInt(s, 10));
}
public static Integer valueOf(String s, int radix) throws NumberFormatException {
return Integer.valueOf(parseInt(s,radix));
}
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
valueOf()调用的还是parseInt()方法,返回值为Integer对象,
特点是,IntegerCache类会缓存-128到127之间的Integer对象,当值在这个范围内时,将直接返回,而不是需要new Integer对象。
Integer.parseInt()
public static int parseInt(String s) throws NumberFormatException {
return parseInt(s,10);
}
public static int parseInt(String s, int radix) throws NumberFormatException
parseInt方法有两个重载,radix指s的进制类型,范围是2-36,默认为10进制
返回为基本类型int,且为10进制。
10进制数123转换为10进制的过程:
123= 1 * 10 * 10 + 2 * 10 + 3
16进制数123转换为10进制的过程:
291= 1 * 16 * 16 + 2 * 16 + 3
valueOf()和parse…()的区别
Java中的基本类型中,
- parse…()返回值都为基本类型
- valueOf返回值都为对应的对象类型,且valueOf会调用parse…()