Integer.parseInt(s)とInteger.valueOf(s)の詳細な違いは?
今日jdkのソースコードを見ているとIntegerに気づきました.parseInt(s)とInteger.valueOf(s)の具体的なコードの実現には違いがあります.
戻り値型は明らかに異なるがjdk 1のためである.5以降の自動梱包と解体は、多くの場合、混同されやすい.
次のコードは波曦のチュートリアルです.
チュートリアルの説明では、1バイト(-128-127)のInteger比較は、基本タイプとして直接比較され、そうでない場合はオブジェクト比較されます.実践の結果はそうですが、Autoboxing/Auto-Unboxingの具体的な実装コードを検討してみましょう(コンパイルで実装されていると噂されていますが、コードが探しにくいのでopenjdkがあるかどうかを見てみましょう).
---
わざわざ行ってみた
JAva言語仕様、
5.1.7 Boxing Conversionに明確な説明があります.
参照
If the value p being boxed is true, false, a byte, a char in the range\u0000 to\u007f, or an int or short number between -128 and 127, then let r1 and r2 be the results of any two boxing conversions of p. It is always the case that r1 == r2.
public static int parseInt(String s) throws NumberFormatException {
return parseInt(s,10);
}
public static Integer valueOf(String s) throws NumberFormatException
{
return new Integer(parseInt(s, 10));
}
戻り値型は明らかに異なるがjdk 1のためである.5以降の自動梱包と解体は、多くの場合、混同されやすい.
public static void main(String[] args) {
String a="400";
String b="400";
System.out.println(Integer.parseInt(a)==Integer.valueOf(b));//int Integer ,Integer
System.out.println(Integer.parseInt(a)==Integer.parseInt(b)); // 。
System.out.println(Integer.valueOf(a)==Integer.valueOf(b)); // Integer , false
}
次のコードは波曦のチュートリアルです.
Integer c=100;
Integer d=100;
Integer c1=200;
Integer d1=200;
System.out.println(c==d); // true
System.out.println(c1==d1);// false
チュートリアルの説明では、1バイト(-128-127)のInteger比較は、基本タイプとして直接比較され、そうでない場合はオブジェクト比較されます.実践の結果はそうですが、Autoboxing/Auto-Unboxingの具体的な実装コードを検討してみましょう(コンパイルで実装されていると噂されていますが、コードが探しにくいのでopenjdkがあるかどうかを見てみましょう).
---
わざわざ行ってみた
JAva言語仕様、
5.1.7 Boxing Conversionに明確な説明があります.
参照
If the value p being boxed is true, false, a byte, a char in the range\u0000 to\u007f, or an int or short number between -128 and 127, then let r1 and r2 be the results of any two boxing conversions of p. It is always the case that r1 == r2.