integer转char_JAVA源码之Integer-1

四、方法

  • toString
三个方法,其中两个static方法。1、public String toString():该方法内部使用toString(int i)实现。2、public static String toString(int i):该方法内部使用stringSize方法巧妙的获取入参的size,然后用getChars把入参转换成字符数组,最后new一个新String对象。
12adbbfbd7558ddb7428d130b38e82a5.png
3、public static String toString(int i, int radix):参入radix为进制数,该方法支持2-36进制字符串的转换,radix大于36或小于2时则转换成10进制的字符串,转换方法直接用toString(int i),其它进制度的转换方法则是先初始化一个33位的字符数组然后把参数i转换成负数,然后对数组从高到低逐个计算出对应的字符,如果是负数最后在加上“-”号,最后把有值的字符位实例化一个字符串对象。源码如下:
58c7e05b5d373ecd3a5358b4581a9c5c.png
  • equals
94546711d6df4e2326b8f87fb2e847a7.png

该方法,先判断入参是否为Integer对象,然后将对象强转为Integer取int的值用==比较

  • hashCode:Integer 类的hashCode直接返回其 int 类型的数据
  • parseInt
两个静态方法:1、public static int parseInt(String s) throws NumberFormatException内部使用parseInt(String s, int radix)实现2、public static int parseInt(String s, int radix) throws NumberFormatException两个参数第一个为数字字符串,第二个为数字的进制数。如果s为null或radix大于36或小于2抛出对应异常。转换实现先判断正负号和然后计算数值,计算数值使用Character.digit(char ch, int radix)实现。源码如下:
ac6ec17b812a89bb274532c29d11bbbd.png
  • parseUnsignedInt
v
  • remainderUnsigned、divideUnsigned:无符号求余和商
  • compare、compareTo、compareUnsigned

compareUnsigned(无符号比较)、compareTo使用compare实现。

compare实现如下:

231150e6d4193d1f5ba00e5cb61b1fb6.png

compareUnsigned:

c58b83d5bfa9508563e183fa2acd7162.png

最小值补码为:1000 0000 0000 0000 0000 0000 0000 0000

MIN_VALU补码为:1000 0000 0000 0000 0000 0000 0000 0000

所以x+MIN_VALU只是改变最高位符号,其它为不影响,所以负数高位变0,正数高位变1,如果是正负数比较永远会比正数大,如果都是正数则不影响。

  • valueOf
1、public static Integer valueOf(int i):实现如下,>=-128切<=127之间的数值在cache中取值,其它的new一个新Integer对象
0e05c0fbadd667559bd88db310fc49f0.png
2、public static Integer valueOf(String s) throws NumberFormatException3、public static Integer valueOf(String s, int radix) throws NumberFormatException以上两个方法内部使用parseInt实现
  • byteValue、shortValue、intValue、longValue、floatValue、doubleValue,除intValue直接获取int值之外,其它的通过int值强转得到
7d17833c1ddcf434bf69884ad39da9e8.png
toHexString、toOctalString、toBinaryString、toUnsignedString
1、public static String toHexString(int i);返回int的16进制无符号字符串,内部用toUnsignedString2、public static String toOctalString(int i);返回int的8进制无符号字符串,内部用toUnsignedString3、public static String toBinaryString(int i);返回int的2进制无符号字符串,内部用toUnsignedString4、private static String toUnsignedString(int i, int shift),转换int为无符号字符串,源码如下图,去掉符号位的计算,从低位高位遍历赋值,最后返回一个新String对象
1947c008818c804625c7f3298ba35b11.png
  • getChars
static void getChars(int i, int index, char[] buf);获取字符数组,源码如下,当i >= 65536时,通过计算除以100的余数,用DigitOnes,DigitTens两个数组获取低位的字符value,当i < 65536时, 通过计算除以10的余数( q = (i * 52429) >>> (16+3)相当于i*0.1,这里为什么这么用有待去百度查证下,用digits获取数组的字符value
90f0af818c50b011c7c8fe9b6b93a908.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值