温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java中Integer.valueOf,parsetInt() String.valueOf的区别有哪些

发布时间:2021-09-09 10:10:37 来源:亿速云 阅读:180 作者:小新 栏目:编程语言

小编给大家分享一下Java中Integer.valueOf,parsetInt() String.valueOf的区别有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

先来看段代码

public class IntegerDemo {   public static void main(String[] args) {     String num = null;     System.out.println( Integer.parseInt(num));// Exception java.lang.NumberFormatException     System.out.println( Integer.valueOf(num));// Exception java.lang.NumberFormatException     System.out.println( String.valueOf(num)); //输出null     num = "";     System.out.println( Integer.parseInt(num)); // Exception java.lang.NumberFormatException     System.out.println( Integer.valueOf(num)); // Exception java.lang.NumberFormatException     System.out.println( String.valueOf(num));//空串,啥也不输出   } }

先看一下 String.valueOf() 里面是怎么写的

Java中Integer.valueOf,parsetInt() String.valueOf的区别有哪些

String.valueOf() 在遇到 null 和 空串的情况下 ,都能正常输出,所以不抛错

再来看下 包装类型 Integer里面又是如何处理的

Java中Integer.valueOf,parsetInt() String.valueOf的区别有哪些

Java中Integer.valueOf,parsetInt() String.valueOf的区别有哪些

这两个方法里面都需要先 parseInt( s,10),就是将字符串s先转成  十进制的 int基本类型,,但是 valueOf()会根据int范围从[-127,127]的内部缓存中去取(用到设计模式中的 享元模式)

一起来看下 parseInt(s, 10),,在方法里面会判断字符串是否是合法的数字,会去校验null, 空串等其他格式,所以会抛错

 public static int parseInt(String s, int radix)         throws NumberFormatException   {     /*      * WARNING: This method may be invoked early during VM initialization      * before IntegerCache is initialized. Care must be taken to not use      * the valueOf method.      */     if (s == null) {       throw new NumberFormatException("null");     }     if (radix < Character.MIN_RADIX) {       throw new NumberFormatException("radix " + radix +                       " less than Character.MIN_RADIX");     }     if (radix > Character.MAX_RADIX) {       throw new NumberFormatException("radix " + radix +                       " greater than Character.MAX_RADIX");     }     int result = 0;     boolean negative = false;     int i = 0, len = s.length();     int limit = -Integer.MAX_VALUE;     int multmin;     int digit;     if (len > 0) {       char firstChar = s.charAt(0);       if (firstChar < '0') { // Possible leading "+" or "-"         if (firstChar == '-') {           negative = true;           limit = Integer.MIN_VALUE;         } else if (firstChar != '+')           throw NumberFormatException.forInputString(s);         if (len == 1) // Cannot have lone "+" or "-"           throw NumberFormatException.forInputString(s);         i++;       }       multmin = limit / radix;       while (i < len) {         // Accumulating negatively avoids surprises near MAX_VALUE         digit = Character.digit(s.charAt(i++),radix);         if (digit < 0) {           throw NumberFormatException.forInputString(s);         }         if (result < multmin) {           throw NumberFormatException.forInputString(s);         }         result *= radix;         if (result < limit + digit) {           throw NumberFormatException.forInputString(s);         }         result -= digit;       }     } else {       throw NumberFormatException.forInputString(s);     }     return negative ? result : -result;   }

看完了这篇文章,相信你对“Java中Integer.valueOf,parsetInt() String.valueOf的区别有哪些”有了一定的了解,如果想了解更多相关知识,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI