这两个函数都将Long转换为二进制String,但是比另一个更优化?我查看了Long类的源代码,这两个静态方法有不同的实现。
答案 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()尊重在硬件中实际实现负数的方式。