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

Jus*_*tin 15 java comparison performance parseint

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

这是Integer.parseIntString.equals的源代码

dhr*_*pra 15

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


Ank*_*hag 5

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