A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 冯佩 中级黑马   /  2013-1-25 20:35  /  1090 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张向辉 于 2013-1-26 16:53 编辑

从代码Integer.toString(35).getClass()可以得出整数35被转成的字符串值的类型,即String。而Integer.parseInt("135").getClass()则会报错,这说明"135"被转成的整数值是自动拆箱后的结果,而不是被封装的整数对象,这是java默认的情况吗?请解释一下除了new Integer("135")这样直接被封装成整数对象的情况外,还有什么时候是以对象存在的?

评分

参与人数 1黑马币 +9 收起 理由
Rancho_Gump + 9 赞一个!

查看全部评分

4 个回复

倒序浏览
Integer i = Integer.parseInt("135");//因为 Integer.parseInt("135");返回的是一个int类型的数据。int是基本类型所以调用getClass();时候会出错
i.getClass();
System.out.println(i.getClass());

这样就可以了,

评分

参与人数 1黑马币 +9 收起 理由
Rancho_Gump + 9 赞一个!

查看全部评分

回复 使用道具 举报
"135"被转成整数值没有进行拆箱操作。。。只是用了Integer类中的一个静态方法而已,是计算得出来的,源代码如下:
  1. public static int parseInt(String s) throws NumberFormatException {
  2.         return parseInt(s,10);
  3.     }
  4.     public static int parseInt(String s, int radix)
  5.                 throws NumberFormatException
  6.     {
  7.         /*
  8.          * WARNING: This method may be invoked early during VM initialization
  9.          * before IntegerCache is initialized. Care must be taken to not use
  10.          * the valueOf method.
  11.          */

  12.         if (s == null) {
  13.             throw new NumberFormatException("null");
  14.         }

  15.         if (radix < Character.MIN_RADIX) {
  16.             throw new NumberFormatException("radix " + radix +
  17.                                             " less than Character.MIN_RADIX");
  18.         }

  19.         if (radix > Character.MAX_RADIX) {
  20.             throw new NumberFormatException("radix " + radix +
  21.                                             " greater than Character.MAX_RADIX");
  22.         }

  23.         int result = 0;
  24.         boolean negative = false;
  25.         int i = 0, len = s.length();
  26.         int limit = -Integer.MAX_VALUE;
  27.         int multmin;
  28.         int digit;

  29.         if (len > 0) {
  30.             char firstChar = s.charAt(0);
  31.             if (firstChar < '0') { // Possible leading "+" or "-"
  32.                 if (firstChar == '-') {
  33.                     negative = true;
  34.                     limit = Integer.MIN_VALUE;
  35.                 } else if (firstChar != '+')
  36.                     throw NumberFormatException.forInputString(s);

  37.                 if (len == 1) // Cannot have lone "+" or "-"
  38.                     throw NumberFormatException.forInputString(s);
  39.                 i++;
  40.             }
  41.             multmin = limit / radix;
  42.             while (i < len) {
  43.                 // Accumulating negatively avoids surprises near MAX_VALUE
  44.                 digit = Character.digit(s.charAt(i++),radix);
  45.                 if (digit < 0) {
  46.                     throw NumberFormatException.forInputString(s);
  47.                 }
  48.                 if (result < multmin) {
  49.                     throw NumberFormatException.forInputString(s);
  50.                 }
  51.                 result *= radix;
  52.                 if (result < limit + digit) {
  53.                     throw NumberFormatException.forInputString(s);
  54.                 }
  55.                 result -= digit;
  56.             }
  57.         } else {
  58.             throw NumberFormatException.forInputString(s);
  59.         }
  60.         return negative ? result : -result;
  61.     }
复制代码

评分

参与人数 1黑马币 +6 收起 理由
Rancho_Gump + 6 赞一个!

查看全部评分

回复 使用道具 举报
沙发正解。
回复 使用道具 举报
Integer.parseInt("135")是int类型,它不会因为你调用了方法而装箱为Integer
还有 Integer i = 135;这时就是以对象存在

评分

参与人数 1黑马币 +6 收起 理由
Rancho_Gump + 6 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马