Java Long.decode和Long.parseLong

Java Long.decode和Long.parseLong,java,long-integer,hex,Java,Long Integer,Hex,在一次测试中,我发现Long.decode的工作原理与简单数字格式字符串的Long.parseLong类似(我指的是不带'0x',…) 我可以在任何地方使用Long.decode而不是Long.parseLong吗?如果不是,为什么?当然,正如您所注意到的,它们可以互换地用于十进制值,但有一些区别: 具有重写的实现,还允许您为十六进制值指定基数,例如16。相反,允许您指定可解码字符串 比较: long first = Long.parseLong("10", 16); Long second =

在一次测试中,我发现
Long.decode
的工作原理与简单数字格式字符串的
Long.parseLong
类似(我指的是不带
'0x'
,…)


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

当然,正如您所注意到的,它们可以互换地用于十进制值,但有一些区别:

具有重写的实现,还允许您为十六进制值指定基数,例如
16
。相反,允许您指定可解码字符串

比较:

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

此处,第一个
和第二个
的十进制值均为
16
。但是,如注释中所述,
parseLong()
返回一个原语
long
值,而
decode()
返回一个
long
对象。

,这需要更多的时间和资源。因此,对于简单的情况,最好使用
Long.parseLong
。但是,
Long.decode
提供了更大的灵活性,因为它允许您对十六进制(例如0xFFFF)或八进制(例如010==8)的输入进行解码。

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


因此,您可以使用decode,但在您的情况下,如果它只是解析十进制数,则最好使用
parseLong
方法。

输出应该是等效的,但从源代码看,
Long.parseLong()
可能更快
Long.decode()
String.startsWith()
进行一些比较,以确定值是否为八进制、十六进制、十进制等。
Long.parseLong()
仅与
String.charAt()进行一些比较。如果您担心性能,可能需要测试这两种方法,看看哪一种效果更好。

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

e、 g


仔细阅读这两个规格。特别是,请注意单词“long”的大写(或不大写)。@HotLicks除了返回值(long,long)之外是否有任何差异?请阅读规范。当您对Java API函数有任何疑问时,这应该是您首先要做的事情。
long
long
不能“互换”使用,即使使用自动装箱也是如此。啊,返回类型不同。@HotLicks我已经添加了一个关于用法的说明,以及返回值。为什么使用parseLong更好?@طاهццц:因为它可以完成您似乎想要的操作,即解析十进制数。如果您不希望字符串包含八进制或十六进制数字,而只包含十进制数字,那么请使用parseLong。如果您希望字符串包含八进制或十六进制数字,请使用decode。它需要的资源更少,速度也更快。可能您的意思是
hex(例如0xFFFF)或八进制(例如010==8)。
是的,谢谢您的更正。我有个脑屁。编辑成我的答案
long first = Long.parseLong("10", 16);
Long second = Long.decode("0x10");
Integer.decode("010") == 8 // octal
Integer.parseInt("010") == 10 // always decimal