Long.decode和Long.parseLong

时间:2014-07-16 12:36:40

标签: java long-integer hex

在测试中,我发现Long.decode的工作方式类似于Long.parseLong的简单数字格式字符串(我的意思是没有'0x'的字符串,...)。

System.out.println(Long.decode("123") + Long.decode("123"));  // prints  246
System.out.println(Long.parseLong("123") + Long.parseLong("123")); // same as above

我可以在任何地方使用Long.decode代替Long.parseLong吗?如果不是为什么?

5 个答案:

答案 0 :(得分:6)

他们的行为都相似,但Long.parseLong会返回原始long,而Long.decode会返回新的Long对象,这需要更多的时间和资源。因此,对于简单案例,最好使用Long.parseLong。但是,Long.decode提供了更大的灵活性,因为它允许您解码十六进制(例如0xFFFF)或八进制(例如010 == 8)的输入。

答案 1 :(得分:4)

如果您的数字可能以0开头而您不希望这是八进制,则不能使用decode()。

e.g。

Integer.decode("010") == 8 // octal
Integer.parseInt("010") == 10 // always decimal

答案 2 :(得分:0)

当然,正如您所指出的,它们可以互换地用于十进制值,但存在一些差异:

Long.parseLong(s, radix)有一个重写的实现,它还允许您指定一个基数,例如16表示十六进制值。相反,Long.decode(s)允许您指定可解码的字符串。

比较

long first = Long.parseLong("10", 16);
Long second = Long.decode("0x10");

此处firstsecond的小数值均为16。但是,正如评论中所述,parseLong()会返回原始long值,而decode()会返回Long个对象。

答案 3 :(得分:0)

这两种方法的区别在于,使用decode方法除了十进制字符串外,还可以传递八进制和十六进制字符串。 parseLong方法的单参数版本仅解释表示带符号十进制整数的字符串。

所以你可以使用解码,但在你的情况下,如果只是为了解析十进制数,最好使用parseLong方法。

答案 4 :(得分:0)

输出应该是等效的,但是查看来源,Long.parseLong()可能会更快。 Long.decode()String.startsWith()进行了一些比较,以确定该值是八进制,十六进制,十进制等。Long.parseLong()仅与String.charAt()进行一些比较。如果您担心性能,可能值得测试两者以确定哪个更好。