Long.toBinaryString()和Long.toString(num,2)之间的区别?

时间:2016-10-01 00:36:04

标签: java

这两个函数都将Long转换为二进制String,但是比另一个更优化?我查看了Long类的源代码,这两个静态方法有不同的实现。

2 个答案:

答案 0 :(得分:0)

答案很容易,只需要进行测试:

class Test {
  public static void main (String args[]) {
    long millisStart = System.currentTimeMillis();
    for(int i = 0; i < 1000000; i++) {
        String s = Long.toBinaryString(i / 10000);
    }
    System.out.println(System.currentTimeMillis() - millisStart);

    millisStart = System.currentTimeMillis();
    for(int i = 0; i < 1000000; i++) {
        String st = Long.toString(i / 10000, 2);
    }
    System.out.println(System.currentTimeMillis() - millisStart);
  }
}

在我测试的系统(Raspberry Pi)上,这导致655与3279。

所以,我猜想Long.toString(num,2);比较慢这也就不足为奇了,因为它必须具有灵活性。

答案 1 :(得分:0)

主要区别在于负数的显示方式。

var s = System.out;
Long oL = 0L;
long num = -1;

s.println(oL.toString(num, 2) );     //binary result
s.println(oL.toBinaryString(num) );

s.println("0x"+oL.toHexString(num).toUpperCase() );

输出:

-1
1111111111111111111111111111111111111111111111111111111111111111
0xFFFFFFFFFFFFFFFF

toString()使用数学符号。

toBinaryString()尊重在硬件中实际实现负数的方式。