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

Java:比较整数和字符串-性能,java,performance,comparison,parseint,Java,Performance,Comparison,Parseint,我有一个字符串和一个int,比如:String str=“12345”和int num=12345。如果它们是相同的,str.equals(“+num)或num==Integer.parseInt(str)(或者有更快的方法吗?) 这是and的源代码,我认为num==Integer.parseInt(str)是一种更好的比较方法。因为str.equals(“+num)这不是比较整数值的理想方式,而且它会在字符串池中创建不必要的字符串常量对象(这会影响性能)。num==integer.parseI

我有一个字符串和一个int,比如:
String str=“12345”
int num=12345。如果它们是相同的,
str.equals(“+num)
num==Integer.parseInt(str)
(或者有更快的方法吗?)


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

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)
有一个更高的常数,因此速度较慢。

我猜你也可以用它来比较

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

我的意思是,可以使用比较运算符“==”检查整数值是否相等。这如何回答这个问题?这是一个完全有缺陷和错误的逻辑。O(n)+O(n)仍然是O(n)-您不需要添加这些数字,因为该符号只告诉您其渐近增长。其余的都是错的。Java通常会注意到“”是一个空字符串,因此没有concatation。一般来说,将一个整数转换成一个字符串要比另一种方法快很多,因为这是一种已知的有效转换,而另一种方法必须处理许多特殊情况。