欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

integer 负数字符串比较_JAVA源码之Integer-1

发布时间:2025/3/15 编程问答 47 豆豆
生活随笔 收集整理的这篇文章主要介绍了 integer 负数字符串比较_JAVA源码之Integer-1 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

四、方法

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

该方法,先判断入参是否为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)实现。源码如下:
  • parseUnsignedInt
v
  • remainderUnsigned、divideUnsigned:无符号求余和商
  • compare、compareTo、compareUnsigned

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

compare实现如下:

compareUnsigned:

最小值补码为: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对象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值强转得到
toHexString、toOctalString、toBinaryString、toUnsignedString1、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对象
  • 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

总结

以上是生活随笔为你收集整理的integer 负数字符串比较_JAVA源码之Integer-1的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。