JAVA中的Integer的parseInt()和IvalueOf()! ! 以及radix是什么?

首先抛出结果:
valueOf()方法和parseInt()方法 , 只有在传入的字符串是由纯数字构成的字符串时 , 才会返回一个整型 , 否则会抛出异常 !

valueOf() 内部实际上是使用了parseInt()方法!

想要接着往下看 , 或者没有找到答案的小伙伴 接着往下看 , 希望下面的测试能找到你想要的答案 !

首先我们要知道这样一个事情 , 那就是valueOf是怎么实现的

Integer.ValueOf()有三种入参的方法

在这里插入图片描述
而无论是哪一种 , 都会在源码中调用一个叫做Integer.parseInt的方法:

//传入一个String字符串和一个int类型的数字表示进制
public static Integer valueOf(String s, int radix) throws NumberFormatException {
        return Integer.valueOf(parseInt(s,radix));
    }
//只传入一个String字符串,默认radix为10进制,其实和第一个方法一样,只不过默认进制为10进制而已
public static Integer valueOf(String s) throws NumberFormatException {
        return Integer.valueOf(parseInt(s, 10));
    }
//传入一个int类型的变量
public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }

我之前找过很多文章 , 都没有说传入的String类型的变量怎么样会抛出异常 , 这里我就给大家测试一下: (第一个第二个入参模式我就一起测试喽…)
在这里插入图片描述
有三种String类型的字符串,纯数字,纯字母,字母+数字

好 , 我们现在来跑一跑 :
在这里插入图片描述
诶 , 抛出异常了 :NumberFormatException . 后面给我们标识了 “csdn” 这个字符串导致的异常 . 那我们就a,b,c分开来打印一下:
在这里插入图片描述
纯数字是可以的! 那我们再来 !
在这里插入图片描述
b = “csdn” 报错了 ,抛出了一个 NumberFormatException 异常 . 我们再试试 c .
在这里插入图片描述
还是抛出异常! ! !

那么善于总结的你发现了嘛 ? 我们使用valueOf()方法的时候 ! 只有传入的是纯数字构成的字符串 , value才能将它变成字符串 .

但是大家要注意一点噢 , valueOf()返回的是一个Integer对象 , 虽然说 , 不会太大的不好 . 但是至少要知道这一点嘛 ! 如果 我们想要它变成一个int类型的变量 , 我们可以再在valueOf()方法后面加上一个 .intValue() ; 将它变成int类型的变量 .

现在我们再来说说 Integer.parseInt();

还是使用上面的几个数据进行测试;
在这里插入图片描述
其实啊 , 结果和上面使用valueof() 是一毛一样的 , 所以大家也别期待了 ;

我们来看看一些奇奇怪怪的问题:
我们将a指定为1024 , radix指定为8
在这里插入图片描述
返回的结果居然是532
在这里插入图片描述
我们指定为10 会返回1024 ; 指定为16 会返回4132 ; 那么这个radix到底是啥???

很多人说 , radix是进制 , 我们来看看源码 :
在这里插入图片描述
在这里插入图片描述

不要纠结 : 我前面说过valueOf() 的本质就是使用了parseInt() ;

翻译一下就是:

以第二个参数指定的弧度将字符串参数解析为带符号的整数。字符串中的字符必须都是指定半径的数字(由Character.digit(char, int)是否返回一个非负值决定),除了第一个字符可以是ASCII减号’-’(’\u002D’)表示负值或ASCII加号’+’(’\u002B’)表示正值。返回结果的整数值。
如果出现以下任何一种情况,将抛出NumberFormatException类型的异常。
第一个参数为空或长度为0的字符串。
半角小于 Character.MIN_RADIX 或大于 Character.MAX_RADIX。
字符串中的任何字符都不是指定半径的数字,但第一个字符可以是减号’-’(’\u002D’)或加号’+’(’\u002B’),条件是字符串的长度大于1。
字符串所代表的值不是int类型的值。

Params:
s - 包含要解析的整数表示的字符串。
radix - 解析s时要使用的radix。
返回
字符串参数所代表的整数,用指定的弧度表示。
抛出:NumberFormatException
NumberFormatException - 如果字符串不包含一个可解析的int。

再看看上面的例子! 所以这里的int值 它被称为弧度!

那么 , 他是怎么算的呢? 其实 这个弧度就是进制 , 我们所知道的有2进制,8进制,10进制,16进制.

(不了解进制计算的小伙伴,要补课了😯)

我们输入1024 , 如果用十进制返回 , 那么会返回 : 4乘10的零次方+2乘10的一次方+0乘10的二次方+1乘10的三次方 = 4+20+0+1000 = 1024

那么我们写8呢 ? 就是 : 4乘8的零次方+2乘8的一次方+0乘8的二次方+1乘8的三次方 = 4 + 16 + 0 + 512 = 532 ; 是不是和我们之前上面代码写的一样!!!

所以 后面的radix就是判断你前面输入的数是几进制的 , 而不是把你的数返回成几进制的值 . 不是你输入4 ,帮你变成00000100 . 而是给你自动补位变成00000004 再变成十进制的4给你 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值