Java Integer

public static String toBinaryString(int i) {

return toUnsignedString(i, 1);

}

发现其实是调用了toUnsignedString(int i,int shift)方法,源代码如下:

private static String toUnsignedString(int i, int shift) {

char[] buf = new char[32];

int charPos = 32;

int radix = 1 << shift;

int mask = radix - 1;

do {

buf[--charPos] = digits[i & mask];

i >>>= shift;

} while (i != 0);

return new String(buf, charPos, (32 - charPos));

}

其中digits的定义是:

final static char[] digits = {

‘0‘ , ‘1‘ , ‘2‘ , ‘3‘ , ‘4‘ , ‘5‘ ,

‘6‘ , ‘7‘ , ‘8‘ , ‘9‘ , ‘a‘ , ‘b‘ ,

‘c‘ , ‘d‘ , ‘e‘ , ‘f‘ , ‘g‘ , ‘h‘ ,

‘i‘ , ‘j‘ , ‘k‘ , ‘l‘ , ‘m‘ , ‘n‘ ,

‘o‘ , ‘p‘ , ‘q‘ , ‘r‘ , ‘s‘ , ‘t‘ ,

‘u‘ , ‘v‘ , ‘w‘ , ‘x‘ , ‘y‘ , ‘z‘

};

好了,源代码都哦已经找好了,现在就看看代码是怎么实现功能的了,我们举toBinaryString(5)为例,也就是toUnsignedString(5, 1);

private static String toUnsignedString(int i, int shift) {

char[] buf = new char[32];

int charPos = 32;

int radix = 1 << shift;//此处shift是1,左移的结果是0010

int mask = radix - 1;//然后减1,结果是0001

do {

buf[--charPos] = digits[i & mask];//buf[31]=digits[0101 & 0001]=digits[1]=1

i >>>= shift;

} while (i != 0);

//循环第二次:buf[30]=digits[0010 & 0001]=digits[0]=0

//循环第三次:buf[29]=digits[0001 & 0001]=digits[0]=1

return new String(buf, charPos, (32 - charPos));

//String(char[] value, int offset, int count) 分配一个新的 String,它包含取自字符数组参数一个子数组的字符。new String为buf[29]+buf[30]+buf[31]=101

}

如果传入5,则返回101,怎么返回0000 0101呢?

int to 8-bit binarystring:

byte b2 = (byte) 5;
String s2 = String.format("%8s", Integer.toBinaryString(b2 & 0xFF)).replace(‘ ‘, ‘0‘);
System.out.println(s2); // 0000 0101
JAVA]二进制,八进制,十六进制,十进制间进行相互转换:

http://blog.csdn.net/szwangdf/article/details/2601941

时间: 2024-11-17 10:11:50

Java Integer的相关文章

Java Integer == 以及分析

Java Integer == 先看一下这段代码 Integer integer1 = 100; Integer integer2 = 100; System.out.println("integer1 == integer2:"+(integer1==integer2)); Integer integer3 = 1000; Integer integer4 = 1000; System.out.println("integer1 == integer2:"+(in

Java Integer 常量池

Integer类 Integer 类在对象中包装了一个基本类型 int 的值.Integer 类型的对象包含一个 int 类型的字段. 此外,该类提供了多个方法,能在 int 类型和 String 类型之间互相转换,还提供了处理 int 类型时非常有用的其他一些常量和方法. Integer i = 10 和 Integer j = new Integer(10) 的区别 1 1.publicstaticvoid main(String[] args){ 2 2.Integer i=10; 3 3

Java Integer为代表的包装类

Java种的Integer是int的包装类型 1. Integer 是int的包装类型,数据类型是类,初值为null 2. 初始化时 int i = 1; Integer i = new Integer(1); 3.  类的自动装箱与自动拆箱 1)自动装箱 Integer i = new Integer(1); //使用正常的声明方法 Integer i = 1; //使用自动装箱 2)自动拆箱 Integer num = 10; //自动装箱 System.out.print(num--);

Java Integer Addition Subtration Overflow 整数加减溢出

leetCode有道题Reverse Integer,因为int的最大值为2的31次方减一,最小值为-2的31次方. 我一开始的代码将res递归加放在try中,以为溢出会有异常,然而并没有. 因为出传入的参数为int类型,且内存和时间要求都能满足,所以long存放中间结果足够了.leet上有个哥们用了一种更机智的溢出检测(自己去看:D) 我的代码: public class Solution { public int reverse(int x) { if(x<=9&&x>=-

java Integer parseInt()(转)

先来一段代码,代码很简单的,如下: public static void main(String[] args) { Integer a = Integer.parseInt("3"); Integer b = Integer.parseInt("3"); Integer c = Integer.parseInt("184"); Integer d = Integer.parseInt("184"); System.out.p

java Integer类的缓存(转)

首先看一段代码(使用JDK 5),如下: [html] view plain copy public class Hello { public static void main(String[] args) { int a = 1000, b = 1000; System.out.println(a == b); Integer c = 1000, d = 1000; System.out.println(c == d); Integer e = 100, f = 100; System.out

理解Java Integer的缓存策略

转载自http://www.importnew.com/18884.html 本文将介绍 Java 中 Integer 缓存的相关知识.这是 Java 5 中引入的一个有助于节省内存.提高性能的特性.首先看一个使用 Integer 的示例代码,展示了 Integer 的缓存行为.接着我们将学习这种实现的原因和目的.你可以先猜猜下面 Java 程序的输出结果.很明显,这里有一些小陷阱,这也是我们写这篇文章的原因. public class JavaIntegerCache { public sta

Java Integer(-128~127)值的==和equals比较产生的思考

最近在项目中遇到一个问题,两个值相同的Integer型值进行==比较时,发现Integer其中的一些奥秘,顺便也复习一下==和equals的区别,先通过Damo代码解释如下: [java] view plain copy System.out.println("<-128~127以内的Integer值,Integer x = value;的方式赋值!>"); Integer i = 127; Integer j = 127; System.out.println("

【转】理解Java Integer的缓存策略

本文将介绍 Java 中 Integer 缓存的相关知识.这是 Java 5 中引入的一个有助于节省内存.提高性能的特性.首先看一个使用 Integer 的示例代码,展示了 Integer 的缓存行为.接着我们将学习这种实现的原因和目的.你可以先猜猜下面 Java 程序的输出结果.很明显,这里有一些小陷阱,这也是我们写这篇文章的原因. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 package com.javapaper

Java Integer类分析

public static final int   MIN_VALUE = 0x80000000;  -2^31 public static final int   MAX_VALUE = 0x7fffffff; 2^31-1 public static String toString(int i, int radix) 该方法返回一个字符串形式的参数,第二个参数为指令的基数,将第一个参数转换为以第二个参数为基数的字符串 package com.yiibai; import java.lang.