Java:判断字符串相等
PHPz
PHPz 2017-04-18 10:46:45
0
5
950
PHPz
PHPz

学习是最好的投资!

全員に返信(5)
黄舟

リーリー

あなたが電話していますa.intern()方法,但是你又没有将返回结果重新赋值,a还是原来那个a

いいねを押す +0
左手右手慢动作

文字列の等しいかどうかを判断するには equals() を使用してください。Java でのこの質問は失敗しました。

いいねを押す +0
PHPzhong

a.intern(); は a 文字の参照を変更せず、戻り値を持ちます。
以下は同等になります

リーリー
いいねを押す +0
左手右手慢动作

リーリー

ここでの A と "abc" は 2 つのオブジェクトです。インターン メソッドが呼び出されるとき、文字定数プールにはすでにこのオブジェクトと等しい文字列が含まれているため、 b="abc" が続いても、インターン メソッドの呼び出しは役に立ちません。 b と a は同じオブジェクトではありません。

出力を同等にしたい場合は、最初の文は次のようになります:

リーリー

または 2 番目の文は次のようになります:

リーリー
いいねを押す +0
洪涛

最初に知っておく必要があるのは、== 演算は 2 つのオブジェクトまたは基本型 a と b が同じメモリ領域を指しているかどうかを決定するということです

String の基礎となる実装は
private Final value[] です。
String がインスタンス化されると、実際には連続メモリを分割して、System.arraycopy を通じて char 配列を保存します。

new String("abc") は、実際にはこの方法で String を初期化することはお勧めできません。実際の実装には、a = "abc" よりも 1 つ多くの手順が必要です。基本的な手順は次のとおりです。

  1. メモリ空間を分割し、一時配列tempを作成します

  2. 温度[0] = 'a';温度[1] = 'b';温度[2] = 'c';

  3. 配列 value を作成し、value が指すメモリ空間を temp が指すメモリ空間にポイントします。つまり、&value = &temp (a = "abc" が使用されている場合、この手順は必要ありません)

intern メソッドは jdk1.5 によって提供されるメソッドで、同じ String は同じメモリ空間を参照します。これは実際には上記の 3 番目のステップです。ここで a と b が等しい場合、次のように書くことができます

リーリー

実際、実行される操作は上記の 3 番目のステップ、つまり b = a;

String b = "abc"実際の基礎となる実装は次のとおりです:

  1. メモリ空間を分割して配列値を作成します

  2. 値[0] = a.値[0];値[1] = a.値[0]';値[2] = a.値[0];

2 番目のステップでは、文字列 b の value[0] の文字列 a の value[0] は実際には同じメモリ アドレスを指しているため、実際には b.value[0] = a.value[0] = 'a'、しかし、b.value は a.value と等しくありません。根本的な理由は、指すメモリ領域が異なることです

文字列のソースコード分析を一度見てみることをお勧めします

[JAVAソースコード分析 - Java.lang] 文字列ソースコード分析

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