Integer.parseInt(s)とInteger.valueOf(s)の詳細な違いは?


今日jdkのソースコードを見ているとIntegerに気づきました.parseInt(s)とInteger.valueOf(s)の具体的なコードの実現には違いがあります.
   
 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.