Java 在检查是否相等时,将字符串转换为Int或Int转换为字符串是否更有效?

Java 在检查是否相等时,将字符串转换为Int或Int转换为字符串是否更有效?,java,android,Java,Android,以下设置: int a=3; String b="3"; 这两个变量表示语义相等的ID。由于应用程序是针对移动设备的,因此以最有效的方式比较这些变量非常重要 将这些变量与此代码段进行比较是否有效 boolean areEqual = Integer.parseInt(b) == a; 还是用这个 boolean areEqual = String.valueOf(a).equals(b); 除非你做了数千次这样的比较,否则这可能无关紧要。也就是说,如果你看看这些陈述中的每一个都在做什么:

以下设置:

int a=3;
String b="3";
这两个变量表示语义相等的ID。由于应用程序是针对移动设备的,因此以最有效的方式比较这些变量非常重要

将这些变量与此代码段进行比较是否有效

boolean areEqual = Integer.parseInt(b) == a;
还是用这个

boolean areEqual = String.valueOf(a).equals(b);

除非你做了数千次这样的比较,否则这可能无关紧要。也就是说,如果你看看这些陈述中的每一个都在做什么:

boolean areEqual=Integer.parseInt(b)=a
此语句将
字符串
值解析一次,然后对两个基本
int
值进行极快的比较

boolean areEqual=String.valueOf(a).equals(b)

此语句对
字符串
进行一次处理,以创建
a
字符串
值,然后进行
字符串
比较。步骤越多,内部逻辑越多,效率就越低。

代码的最高效率可能是在每次比较时在int和String之间进行转换。
当您首先获得数据时,只需执行从字符串到int的转换。通过这种方式,您还可以确保用户立即收到任何错误消息,例如,当用户输入错误时。

如果您确实知道字符串包含数字,最有效的方式可能是

boolean areEqual = (a == (b.charAt(0) - '0'));

仅仅因为它是移动的并不意味着你需要以最有效的方式做每件事。您是否进行过任何分析以检查这是否确实是一个瓶颈?如果是这样的话,你是否尝试过每种方法并比较结果?文本值是否可能不是整数的文本表示形式?您不太可能在两者之间找到任何有意义的差异。如果
b
不是整数会发生什么?过早优化。无论如何,除非这个操作被执行数百万次,否则速度的提高是可以忽略的。@Ruchira写了一个测试,我重写了它。这个测试支持你的说法:我并没有真正寻找确认测试。。。我只是觉得每个操作的处理器周期越少,效率就越高,这是合乎逻辑的。虽然有时候看起来应该更简单的事情结果却不是这样,但在这种情况下,它看起来很清楚是的,这确实很清楚。我只是试图改进他的错误测试(它给出了相反的结果)。我认为第二个确实会慢一些,但主要是因为必须分配一个新的
String
对象(以及稍后的垃圾收集)。第一种可能是在没有任何分配的情况下完成的,这也是问题的一部分。但是,由于需要比较字符串中的每个字符,因此,即使与现有字符串进行字符串比较,其速度也总是比int比较慢。int比较可以在CPU中的单个操作中完成