我有一个字符串和一个整数,比方说:String str = "12345";
和 int num = 12345;
。最快的方法是如何判断它们是否相同,str.equals("" + num)
还是num == Integer.parseInt(str)
(或者还有更快的方法吗?)?
这是Integer.parseInt和String.equals的源代码。
我有一个字符串和一个整数,比方说: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)
不是比较整数值的理想方式,而且它会在字符串池中创建不必要的字符串常量对象(这会影响性能)。
猜想您也可以使用此功能进行比较......
int p = 1234;
String Int = "1234";
String string = String.valueOf(p);
System.out.println(string + Int);
System.out.println(string.equals(Int));
code here