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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王陶成 中级黑马   /  2012-9-7 19:42  /  1661 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Integer.parseInt("110", 2); Integer.parseInt("3c", 16); 可以将String类型的数字转换成二进制,十六进制。
可是 Integer.parseInt("110", 20) ,我传一个20进去,它也能转换出来,请问出来的结果是什么?

4 个回复

倒序浏览
本帖最后由 武庆东 于 2012-9-7 21:48 编辑

参看API解释
public static int parseInt(String s,
                           int radix)
                    throws NumberFormatException使用第二个参数指定的基数,将字符串参数解析为有符号的整数。除了第一个字符可以是用来表示负值的 ASCII 减号 '-' ('\u002D’)外,字符串中的字符必须都是指定基数的数字(通过 Character.digit(char, int) 是否返回一个负值确定)。返回得到的整数值。
参数:s - 包含要解析的整数表示形式的 Stringradix - 解析 s 时使用的基数。 返回:使用指定基数的字符串参数表示的整数。 抛出: NumberFormatException - 如果 String 不包含可解析的 int。
示例:
  1. parseInt("0", 10) 返回 0
  2. parseInt("473", 10)返回 473
  3. parseInt("-0", 10) 返回 0
  4. parseInt("-FF", 16) 返回 -255
  5. parseInt("1100110", 2) 返回 102
  6. parseInt("2147483647", 10) 返回 2147483647
  7. parseInt("-2147483648", 10) 返回 -2147483648
  8. parseInt("2147483648", 10) 抛出 NumberFormatException
  9. parseInt("99", 8) 抛出 NumberFormatException
复制代码

如果发生以下任意一种情况,则抛出一个 NumberFormatException 类型的异常:
1.第一个参数为 null 或一个长度为零的字符串。
2.基数小于 Character.MIN_RADIX 或者大于 Character.MAX_RADIX。
3.假如字符串的长度超过 1,那么除了第一个字符可以是减号 '-' ('u002D’) 外,字符串中存在任意不是由指定基数的数字表示的字符。
4.字符串表示的值不是 int 类型的值。
回复 使用道具 举报
武庆东 发表于 2012-9-7 20:26
参看API解释
public static int parseInt(String s,
                           int radix)

请问,public static int parseInt(String s, int radix)的radix参数,为什么传递一个2,8,10,16以外的参数也能出来结果,结果是什么了?
回复 使用道具 举报
本帖最后由 武庆东 于 2012-9-7 22:02 编辑
王陶成 发表于 2012-9-7 21:33
请问,public static int parseInt(String s, int radix)的radix参数,为什么传递一个2,8,10,16以外的 ...

以Integer.parseInt("23")为例,其实默认调用的是int  i=Integer.ParseInt("23",10);
其中10代表的就是10进制,转换的过程可以看成 i=2*10+3*10;
同理 int i=Integer.pareInt("123",16);
可以看做:i=1*16*16+2*16+3;
根据:Character.MIN_RADIX=2和Character.MAX_RADIX=36 则,parseInt(String s, int radix)参数中  
radix的范围是在2~36之间,超出范围会抛异常。
回复 使用道具 举报
武庆东 发表于 2012-9-7 21:59
以Integer.parseInt("23")为例,其实默认调用的是int  i=Integer.ParseInt("23",10);
其中10代表的就是10 ...

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