本日のコンテンツ紹介は約9分です 写真 違いをよりよく理解するために、例を見てみましょう。 この例では、2 つの文字列の内容は同じですが、メモリ内のアドレスは異なります。したがって、.equals() メソッドを使用して内容を比較すると true が返されますが、"==" 演算子を使用してアドレスを比較すると false が返されます。 1. .equals() メソッドをオーバーライドするJava の基礎を学んだことがあるなら、すべての Java クラスがデフォルトで Object クラスを継承し、Object クラスに .equals() メソッドがあることを知っているはずです。 コードから、.equals() メソッドはデフォルトで比較に == 演算子を使用していることがわかります。サブクラスが equals() メソッドをオーバーライドしない場合、== 演算子を使用すると、equals() メソッドと同じ結果になります。これは、2 つのオブジェクトのメモリ アドレスが等しいかどうかを比較するために使用されます。 しかし、現実には、多くのクラスがequals()メソッドをオーバーライドしています。これは、メモリアドレスの比較要件が比較的厳しく、実際にはすべてのシナリオのニーズを満たしていないためです。たとえば、Stringクラスを比較する場合、ほとんどの人はコンテンツが等しいかどうかのみを判断したいだけで、メモリアドレスが等しいかどうか(オブジェクトであるかどうか)を実際に知りたいわけではありません。 また、「Java文字列定数プールの詳細な理解」の記事では、Java仮想マシンがメモリオーバーヘッドを削減し、パフォーマンスを向上させるために文字列用のスペースを特別に割り当てることがすでにわかっています - 文字列定数プール つまり、new はヒープ上に新しいスペースを必要とするため、new キーワードを使用する代わりに、String s = "Hello" の形式を使用して文字列オブジェクトを作成することをお勧めします。 1.1. Stringクラスのequals()メソッドJdk11のStringクラスのequals()メソッド
特記事項: Latin1 (ISO 8859-1 とも呼ばれる) と UTF-16 (Unicode Transformation Format 16 ビット) は、2 つの異なる文字エンコード方式です。 Latin1 と UTF-16 は 2 つのエンコード方式ですが、違いは大きくありません。UTF-16 の equals() メソッドを例に挙げてみましょう。 注: Java 8とJava 11のequals()メソッドのソースコードは異なります。JDK8のequals()メソッド
1.2. 例の説明例1: 出力は何ですか? String クラスの equals メソッドは、文字列オブジェクトの内容が等しいかどうかを比較します。両方とも "Hello" なので、結果は true になります。 例2: 出力は何ですか? == 演算子は、オブジェクトのアドレスが等しいかどうかを比較します。== の左側はヒープ内に作成されたオブジェクトで、右側は文字列定数プール オブジェクトです。内容は等しいですが、アドレスが等しくないため、結果は false になります。 例3: 出力は何ですか? 新しいオブジェクトは完全に異なるメモリアドレスを持つ必要があるため、結果は偽になります。 例4: 出力は何ですか? hとelloは両方とも文字列定数プールにあるので、コンパイラは+演算子に遭遇すると自動的にhelloに最適化し、結果はtrueになります。 例5: 出力は何ですか? new String("hello") が実行されると、まず文字列定数プールにオブジェクトが作成され、次にヒープにオブジェクトが作成されます。 intern() メソッドが実行されると、文字列定数プールにオブジェクト 'hello' がすでに存在することが判明するため、文字列定数プールのオブジェクト参照が直接返され、文字列定数プールの 'hello' と比較されるため、結果は true になります。 String.intern()の詳細な分析では、すでにその理由を紹介しました。 2. 他の方法との比較
|
<<: 世界最強のモデル クロード3号が物理・化学を覆す!博士課程の1年間の実験の結果が2時間で解読され、ネットユーザーは「科学的研究はもう存在しない」と叫んだ。
>>: Claude3はマイクロソフトとOpenAIに警鐘を鳴らした
AIが描いたマリリン・モンローが180°回転してアインシュタインに? !これは、最近ソーシャル メデ...
インテリジェント製造は、世界中の工業製造企業が追求する目標です。インテリジェント化のプロセスには、設...
JetBrains は 11 月 21 日に、世界中の 26,348 人の開発者からの調査結果をまと...
モバイル アプリケーション業界は長年にわたって発展しており、当社のシステムの重要な部分となっています...
この記事はLeiphone.comから転載したものです。転載する場合は、Leiphone.com公式...
9月21日、openKylinオペレーティングシステムは今晩、ビッグモデルへのアクセスを正式に発表し...
7月16日、OpenAIが開発した人工知能チャットボット「ChatGPT」は、ユーザーと自然言語で会...
OpenAIでの混乱はひとまず終息し、社員たちは忙しく「仕事」をしている。今年初めに OpenAI ...
[[91338]] HTML5 がリリースされてから長い時間が経ちますが、日々の仕事や個人の Web...
[[219151]]機械学習の分野では、「ただで得られるものはない」というのは不変の定理です。つまり...
[[217139]]この記事では、k-means アルゴリズムを使用して画像の色を復元することを提案...
この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...
[[403037]]画像ソース: https://pixabay.com/images/id-32...