目录
- Integer的parseInt和valueOf的区别
- 一、简述
- 二、valueOf(String s)的源码
Integer的parseInt和valueOf的区别
一、简述
Integer.parseInt(s)是把字符串解析成int基本类型,Integer.valueOf(s)是把字符串解析成Integer对象类型,其实int就是Integer解包装,Integer就是int的包装,在jdk8中已经自动实现了自动解包装和自动包装,所以两种方式都能得到想要的整数值。
String str = "1"; System.out.println(Integer.valueOf(str));//1 System.out.println(Integer.parseInt(str));//1
输出都是 1。两个方法都可以把数字类型字符串转成 int 类型整数,但是这两个方法还是有一点区别的:
valueOf(String s) 调用了 parseInt(String s, int radix),而 parseInt(String s, int radix) 返回值是一个 int 类型的值,之后又调用了 valueOf(int i) 将 int 进行了装箱返回包装类型 Integer。
所以如果不需要返回包装类型,可以直接调用 parseInt(String s),效率更高。
二、valueOf(String s)的源码
可以看到调用 parseInt 的时候还传了一个 int 类型参数 radix,这个参数表示进制,默认使用十进制进行转换。下面是该方法的源码:
public static int parseInt(String s, int radix) throws NumberFormatException { /* 警告:在初始化IntegerCache之前,VM初始化期间可能会提前调用此方法。 * 必须注意不要使用valueOf方法。 * WARNING: This method may be invoked early during VM initialization * before IntegerCache is initialized. Care must be taken to not use * the valueOf method. */ //字符串为空则抛出NumberFormatException if (s == null) { throw new NumberFormatException("null"); } //传的进制参数小于2,抛出NumberFormatException, //并且提示进制小于最小进制 if (radix < Character.MIN_RADIX) { throw new NumberFormatException("radix " + radix + " less than Character.MIN_RADIX"); } //传的进制参数大于36,抛出NumberFormatException, //并且提示进制大于最大进制 if (radix > Character.MAX_RADIX) { throw new NumberFormatException("radix " + radix + " greater than Character.MAX_RADIX"); } int result = 0; //negative 用来判断结果是否为负数 boolean negative = false; //获取字符串长度 int i = 0, len = s.length(); //limit = -2147483647 int limit = -Integer.MAX_VALUE; //用于在添加下一位数字的前判断是否溢出的值 int multmin; //需要追加的数字 int digit; //字符长度大于0 if (len > 0) { //判断字符串是否有符号 char firstChar = s.charAt(0); if (firstChar < '0') { // Possible leadjsing "+" or "-" if (firstChar == '-') { //第一个符号是负号,所以结果是负数 negative = true; limit = Integer.MIN_VALUE; } else if (firstChar != '+www.devze.com') //不为负数或正数,抛出NumberFormatException throw NumberFormatException.forInputString(s); //长度为1,抛出NumberFormatException if (len == 1) // Cannot have lone "+" or "-" throw NumberFormatException.forInputString(s); i++; } //计算 multmin ,注意负数和正数的limit是不一样的, //负数的limit = -2147483648,正数的limit = -2147483647 multmin = limit / radix; while (i < len) { // Accumulating negatively avoids surprises near MAX_VALUE digit = Character.digit(s.charAt(i++), radix); if (digit < 0) { http://www.devze.com throw NumberFormatException.forInputString(s); } if js(result < multmin) { throw NumberFormatException.forInputString(s); } result *= radix; if (result < limit + digit) { throw NumberFormatException.forInputString(s); } result -= digit; } } else { //字符不为空,但是字符长度等于0,抛出NumberFormatException throw NumberFormatException.forInputString(s); } //根据正负数的标识来判断结果取正还是取反 return negative ? result : -result; }
到此这篇关于Java中Integer的parseInt和valueOf的区别详解的文章就介绍到这了,更多相关Integer的parseInt和valueOf的区别内容请搜索编程客栈(www.devze.com)以前的文jXTUTez章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!
精彩评论