検索

ホームページ  >  に質問  >  本文

Java:判断字符串相等

PHPzPHPz2802日前948

全員に返信(5)返信します

  • 黄舟

    黄舟2017-04-18 10:48:45

    リーリー

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

    返事
    0
  • ringa_lee

    ringa_lee2017-04-18 10:48:45

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

    返事
    0
  • PHPz

    PHPz2017-04-18 10:48:45

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

    リーリー

    返事
    0
  • ringa_lee

    ringa_lee2017-04-18 10:48:45

    リーリー

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

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

    リーリー

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

    リーリー

    返事
    0
  • PHP中文网

    PHP中文网2017-04-18 10:48:45

    最初に知っておく必要があるのは、== 演算は 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
  • キャンセル返事