Java在比较字符串的时候,equals 与== 完全一样呀?
阿神
阿神 2017-04-17 17:36:04
0
9
462

完全一样,比较字符串equals与== 完全没有区别吗?

阿神
阿神

闭关修行中......

全員に返信(9)
Ty80

リーリー

結果:

リーリー

== は、オブジェクトを指す変数が一貫しているかどうかを比較します。s と s2 が等しい理由は、jvm が最適化し、2 つの変数が 1 つのオブジェクトを指すためです。
equal は、オブジェクトに格納されている文字列が同じかどうかを比較します。

いいねを押す +0
刘奇

いくつかの質問には、実際にはソース コードに最良の答えが含まれています

リーリー
いいねを押す +0
刘奇

== 演算子は、2 つの参照が同じオブジェクトを指しているかどうかをテストします。 2 つの異なるオブジェクトが等しいかどうかをテストする場合は、equals() メソッドを使用する必要があります。

さらに詳しく知りたい場合は、私が書いた記事を読んでください。 Java クイック リテラシー ガイド

いいねを押す +0
迷茫

あなたの質問は非常に問題があると思います。投稿したコードから本文に記載されている結論をどのように導き出したのですか?
あなたの意図を大まかに推測して、しぶしぶ答えてみます。
Java では、== メソッドと等しいメソッドは異なります。簡単に説明すると、次のとおりです。

  1. ==

    == は、
    Object a = new Object();
    Object b = a;
    a == b; のように、2 つの参照が同じオブジェクトを指しているかどうかを判断するために使用されます。 =>本当

  2. 等しい

    equal メソッドは、2 つのオブジェクトが等しいかどうかを判断するために使用されます。このメソッドは、最上位クラス Object で定義されています。Object でのこのメソッドの実装では、== を使用して参照が等しいかどうかを比較します。サブクラスでequalメソッドを使用したい場合は、Objectのequalメソッドをオーバーライドし、独自の等価ロジックを提供するのが最善です。次のように Person クラスを定義します。

リーリー
いいねを押す +0
巴扎黑

ss2 はどちらも定数「12」への直接参照であり、コンパイラーはコードを最適化し、2 つの変数によって参照される「12」 String オブジェクトのみを作成します。つまり、s == s2 になります。しかし、他の「12」が new String("12")"1234".substring(0, 2) などの他の方法で作成された場合、== は機能せず、equals が内容を比較することがわかります。 equals の元のコードを見ると、最初に == を使用して、参照されている

を比較していることがわかります。 リーリー
いいねを押す +0
巴扎黑

新しいものが出たら違うでしょう

いいねを押す +0
迷茫

まず第一に、equals と == の機能を考慮する必要があります。
== は 2 つのオブジェクトの参照を比較するのと同等ですが、equals メソッドは Object クラスで定義され、String によって書き換えられています。上記の分析では、まず == を使用して参照を比較し、次に内容を比較しました。
2 つの文字列を比較する場合、主に内容を比較する必要があるため、equals メソッドを使用します。 == を使用すると、IDE は実際に警告をスローします。

では、なぜ == メソッドと equals メソッドが同じ効果を持つのでしょうか? それは、「=」を使用して文字列オブジェクトを作成する場合と、new を使用して文字列を作成する場合の違いに依存します。
あなたが文字列プールを理解したことがあるかどうかはわかりませんが、必要に応じて自分で確認してください。
初めて「=」を使用して文字列オブジェクトを作成すると、文字列プールに「12」があるかどうかがチェックされ、ない場合はプールに 12 が追加され、s2 が作成されます。 、プール内に 1 つあることが判明すると、この参照は s2 に直接割り当てられるため、s と s2 の参照は同じとなり、== 比較が true になります。
new を使用して文字列を作成し、その効果を確認できます。

リーリー

new キーワードを使用して文字列オブジェクトを作成する場合、毎回新しいオブジェクトが作成され、参照が変数に割り当てられます。

いいねを押す +0
Peter_Zhu

すべてがうまくいきました。文字列定数プールを検索することをお勧めします。それにより、深い理解が得られます。

いいねを押す +0
巴扎黑

s1 と s2 の内容は同じです。
割り当て方法は次のとおりです。
まず、s1 は文字列 "..." を JVM 仮想マシンの定数プールに入れます。 🎜 > s2 を 2 回目に割り当てるときは、まず定数プールにこの文字列が含まれているかどうかを判断し、含まれている場合はそれを指します。
したがって、== を使用した場合でも、それは等しくなります。
s2 で new string(123) を使用する場合、参照アドレスは異なり、等しくありません。
携帯電話でのコード作成は簡単ではありません。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート