web-dev-qa-db-ja.com

Java:intと文字列の比較-パフォーマンス

Stringとintがあります。たとえば、_String str = "12345";_と_int num = 12345;_です。 str.equals("" + num)またはnum == Integer.parseInt(str)が同じかどうかを確認する最も速い方法は何ですか(または、もっと速い方法はありますか?)。

これは Integer.parseInt および String.equals のソースコードです

14
Justin

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)はより高い定数を持っているので遅くなります。

14
dhruv chopra

num == Integer.parseInt(str)は比較を行うより良い方法だと思います。 str.equals("" + num)は、整数値を比較する理想的な方法ではなく、また、ストリングプールに不要なストリング定数オブジェクトを作成するため(パフォーマンスを低下させます)。

5
Ankur Shanbhag

これを使用して比較することもできると思います........

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