Java:比较整数和字符串 – 性能

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

这是Integer.parseInt和String.equals的源代码

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

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

猜猜你也可以用它来比较……..

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