在测试中,我发现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
吗?如果不是为什么?
答案 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");
此处first
和second
的小数值均为16
。但是,正如评论中所述,parseLong()
会返回原始long
值,而decode()
会返回Long
个对象。
答案 3 :(得分:0)
这两种方法的区别在于,使用decode
方法除了十进制字符串外,还可以传递八进制和十六进制字符串。 parseLong
方法的单参数版本仅解释表示带符号十进制整数的字符串。
所以你可以使用解码,但在你的情况下,如果只是为了解析十进制数,最好使用parseLong
方法。
答案 4 :(得分:0)
输出应该是等效的,但是查看来源,Long.parseLong()
可能会更快。 Long.decode()
与String.startsWith()
进行了一些比较,以确定该值是八进制,十六进制,十进制等。Long.parseLong()
仅与String.charAt()
进行一些比较。如果您担心性能,可能值得测试两者以确定哪个更好。