Long
オブジェクトではなく、原始的です。 ==
を使用することによって、あなたは基準値を比較しています。あなたは2回目の比較でそうであるように
if(str.equals(str2))
:
あなたが行う必要があります。
編集:私はそれを得る...あなたは他のオブジェクトがString
リテラルのように動作すると考えています。彼らは*ではありません。そしてその後も、あなたはどちらか==
とString
リテラルを使用することはありません。
(* AutoBoxのタイプだけの値-128のため、Flyweightパターンを実装するのです - あなたは50
へのごLong
を等しくした場合、あなたが実際に同じフライ級オブジェクトへの2つの参照を持っているでしょうそして再び、を使用することはありません> 127。 ==それらを比較するために)
編集追加する:。これは、特にJava言語仕様に記載され、Section 5.1.7を:
ボックス化された値pがfalse、trueの場合、バイト、または範囲の\ u007fに\ U0000、または-128と127の間の整数または短い数(包括的)、次いで、R1及びR2は、Pのいずれか2つのボクシング変換の結果であるとします。常にr1 == r2の場合です。
(1.6および1.7)、決して使用==
Long l = 5L;
Long l2 = 5L;
System.out.println(l == l2);
l = 5000L;
l2 = 5000L;
System.out.println(l == l2);
出力にさらに別の理由であるlong
は特に言及ないですが、現在のOracleとOpenJDKの実装がそうすることに注意してください。
真
偽
こんにちはブライアン中の内部実装です!答えをありがとう、しかし、あなたはこの範囲(-128 - > 127)についてのこの説明をどこで見つけることができますか教えてください。 –
@RenatoLochetti [Java言語仕様(JLS)セクション5.1.7 - 最後の段落](http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls)で説明されています。 -5.1.7)。 [Flyweight pattern](http://en.wikipedia.org/wiki/Flyweight_pattern)の実装です。 –
@RenatoLochetti編集された質問を件名に展開しました。 –