20

我有一个 String 和一个 int,可以说:String str = "12345";int num = 12345;. 查看它们是否相同的最快方法是什么,str.equals("" + num)或者num == Integer.parseInt(str)(或者是否有更快的方法?)?

这是Integer.parseIntString.equals的源代码

4

3 回答 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)具有更高的常数,因此更慢。

于 2013-04-13T05:46:39.367 回答
5

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

于 2013-04-13T05:45:00.453 回答
2

猜猜你也可以用这个来比较......

int p = 1234;
String Int = "1234";
String string = String.valueOf(p);
System.out.println(string + Int);
System.out.println(string.equals(Int));
code here
于 2013-04-13T08:50:09.600 回答