2
    String a = "test";
    String b = a;

    a = "wuut";

    System.out.println(b);

プリントアウトtest

その価値をとるだけでなく、bの参照を保持するべきではありませんか?a

Javaはオブジェクトなどでそのように機能しませんか?

4

7 に答える 7

5

bは、その価値をとるだけでなく、aの参照を保持するべきではありませんか?

いいえ。の値a 参照です。参照は、変数ではなく、オブジェクトにアクセスする方法です。代入演算子は、右側の式の値を左側の変数にコピーするだけです。それがすべてです-それは非常に簡単です。Javaには参照渡し、変数エイリアシングなどはありません。

于 2012-10-05T06:29:06.317 に答える
2

が作成されたとき、それがメモリ内aに配置することを指しているとしましょう。memory_1

bに割り当てられている場合a、は同じ場所bを指します。memory_1

これで、a値を変更すると(そして、文字列オブジェクトが不変であるため)、新しい値がメモリに作成され、をa指すようになりmemory_2ます。

しかしねえ、bまだポイントしmemory_1ます。

PS:不変性は次のとおりです。

オブジェクト指向および関数型プログラミングでは、不変オブジェクトは、作成後に状態を変更できないオブジェクトです。

于 2012-10-05T06:33:17.713 に答える
1
String a = test

ヒープa上の文字列リテラルの「テスト」Object Reference Variableを指しています。

String b = a;

いいえb、ヒープ上の同じ文字列リテラルの「テスト」Object Reference Variableも指していません。

今、

a = "wuut";

しかしb、それでも文字列リテラルの「テスト」指しています。

したがって、そのbは、以前はaによっても参照されていたオブジェクトへの参照を保持しますが、aへの参照は保持しません。

于 2012-10-05T06:28:04.433 に答える
0

いいえ、そうではありません。の値b想定しています。後で変更する場合は、変更しません。それはエイリアスでもその性質のものでもありません。aab

于 2012-10-05T06:28:09.503 に答える
0
String a = "test";

これで、aは文字列「test」への参照を保持します。

String b = a;

aの値がbにコピーされます。Aは「テスト」への参照であるため、bも「テスト」への参照になります。

a = "wuut";

これで、aに「wuut」への参照が割り当てられます。bはaへの参照を保持していないため、これはbには影響しません。

于 2012-10-05T06:28:48.193 に答える
0

No.は、文字列への参照であるb値を保持します。あなたが考えているのは、それを指す文字列を変更した場合も変更されるということです(のようなもの)。ただし、Java文字列は不変であるため、変更することはできません。a"test"ba.append("wuut");

于 2012-10-05T06:30:17.287 に答える
0

このステップを段階的に見ていきましょう。

  1. String a = "test"-このオブジェクト上にオブジェクト"test"と参照a点を作成します。
  2. String b = a-同じオブジェクトへの新しい参照bポイントを作成します"test"
  3. a = "wuut"-参照aを別のオブジェクトに再割り当てしますが、参照bは引き続きオブジェクトを指しますtest
于 2012-10-05T06:30:29.127 に答える