Java:比较int和String - 性能

20

我有一个字符串和一个整数,比方说:String str = "12345";int num = 12345;。最快的方法是如何判断它们是否相同,str.equals("" + num)还是num == Integer.parseInt(str)(或者还有更快的方法吗?)?

这是Integer.parseIntString.equals的源代码。

3个回答

22

num == Integer.parseInt(str)的速度比 str.equals(""+num) 更快。

str.equals(""+num) 首先会将num转换为字符串,这是一个O(n)的操作,其中n是数字中数字位数。然后它将执行一个字符串连接操作,再次是O(n),最后进行字符串比较。在这种情况下,字符串比较是另一个O(n)的操作,n是数字中数字位数。所以总共是 ~3*O(n)。

num == Integer.parseInt(str)将把字符串转换为整数,这又是一个O(n)的操作,其中n是数字中数字位数。然后整数比较是O(1)。因此只需 ~1*O(n)。

总之,两者都是O(n) - 但是str.equals("" + num)具有更高的常数因子,因此更慢。


那是一个完全有缺陷和错误的逻辑。 O(n) + O(n) 仍然是 O(n) - 因为这种符号表示只告诉你它的渐近增长情况,而不是把这些数字相加。 其余部分也是错的。Java 通常会注意到“”是一个空字符串,因此不需要进行拼接。将整数转换为字符串通常比另一种方式快得多,因为它是一个已知的有效转换,而另一种方式必须处理许多特殊情况。 - ABaumstumpf

5

我认为num == Integer.parseInt(str)是更好的比较方法,因为str.equals("" + num)不是比较整数值的理想方式,而且它会在字符串池中创建不必要的字符串常量对象(这会影响性能)。


我的意思是说,可以使用比较运算符“==”检查整数值是否相等。 - Ankur Shanbhag

0

猜想您也可以使用此功能进行比较......

int p = 1234;
String Int = "1234";
String string = String.valueOf(p);
System.out.println(string + Int);
System.out.println(string.equals(Int));
code here

这个回答如何回答问题? - cellepo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接