EDITORIAL言葉
最近のプロジェクトは、今、プログラマーとして限り小さなバグを、遭遇したとき、彼らは、基本的な事柄を知ることが恥ずかしい取得 - このマークは、繰り返さない願っています
問題:
ロングlong1 = 127L;
ロングlong2 = 127L;
System.out.println(long1 == long2); //真
のSystem.out.println(long1.equals(long2)); //真の
ロングlong1 = 128L;
ロングlong2 = 128L;
System.out.println(long1 == long2); // falseを
するSystem.out.println(long1.equals(long2)); //真
なぜ<= 127、可能性> 128ができないのですか?パッケージタイプは、==の比較をも使用されていますか
分析:
この値を超える127にキャッシュと-128の方法の値が、それは2つのオブジェクトが返さ==と比較され、新たなパッケージ・オブジェクトを作成する際の包装のvalueOfクラスのメソッドを使用して、2つの値の1比較間違いなく偽。以下は、ロングのvalueOfソースのタイプです
パブリック静的ロングのvalueOf(長L){
最終INTは128 =オフセット。
IF(L> = -128 && L <= 127){//キャッシュする
LongCache.cache [(INT)L +オフセット]を返します。
}
新しいロング(L)を返します。
}
2.メソッドのvalueOfキャッシュ値の異なるタイプが、それは何ですか?次の5つの値をキャッシュしています
タイプ | キャッシュのスコープ | 値の範囲 |
キャラクター | 0〜127 | 0〜65535 |
バイト | -128〜127 | -128〜127 |
ショート | -128〜127 | -32768〜32767 |
整数 | -128〜127 | -2147483648〜2147483647 |
長いです | -128〜127 | -9223372036854775808〜9223372036854775807 |
3.FloatとDouble型の値にそれをキャッシュされていますか?以下は、フロートのvalueOfの源であります
パブリック静的フロートのvalueOf(フロートF){
新しいfloat(F)を返します。
}
何のキャッシュ値を見ることができないとして、それが直接==を使用して比較することはできません
4.パッケージタイプのいくつかの基本的な種類やその他の機能は、次のアドレスのブログを参照してください。
(a)は、パッケージ型の8つの基本タイプに対応するJavaソースコードを理解します
要約:
二つの値が実質的に推奨されるタイプのラッパーである場合1.直接法に等しいです。