JavaのStringについて


プログラミング初心者です。

[code]

    String name1 =“Japan”;
    String name2 =“USA”;
    String name3;
    name3 = name1;
    name1 = name2;
    name2 = “UK”;
    system.out.println(name1);
    system.out.println(name2);
    system.out.println(name3);
    
[/code]

上記コードのアウトプットは

[code]

    UK (name1 = name2 = UK と考えました)
    UK
    UK (name3 = name1 = name2 = UK と考えました)
    
[/code]

と表示されると思っていましたが、  
実際は、以下の通り表示されます。

[code]

    USA
    UK
    Japan
    
[/code]

なぜこのように表示されるかご教示頂けますと幸いです。  
どうぞよろしくお願いいたします。




プログラミング言語の代入と、等値性の宣言を混同されているのでしょうか。

[code]

    String name1 =“Japan”;
    String name2 =“USA”;
    String name3;
    name3 = name1; //`name3`にはこの時点の`name1`の値である"Japan"が代入される
    name1 = name2; //`name1`にはこの時点の`name2`の値である"USA"が代入される、`name3`には無関係
    name2 = “UK”;  //`name2`にはこの時点で"UK"が代入される、`name1`や`name3`には無関係
    
[/code]

1行目の代入で設定された`name3`の値が2行目の`name1 = name2;`で変わることはありません。数学記号の`=`を使っていますが、`name3
=
name1;`という代入は、「この後ずっと`name3`と`name1`を同じ値にする」という意味ではなく、単に「その時点の`name1`の値を`name3`に代入するだけ」(以下同様)と言うのがわかればすぐにご理解いただけると思うのですが、いかがでしょうか?




プログラミング言語の代入と、等値性の宣言を混同されているのでしょうか。

[code]

    String name1 =“Japan”;
    String name2 =“USA”;
    String name3;
    name3 = name1; //`name3`にはこの時点の`name1`の値である"Japan"が代入される
    name1 = name2; //`name1`にはこの時点の`name2`の値である"USA"が代入される、`name3`には無関係
    name2 = “UK”;  //`name2`にはこの時点で"UK"が代入される、`name1`や`name3`には無関係
    
[/code]

1行目の代入で設定された`name3`の値が2行目の`name1 = name2;`で変わることはありません。数学記号の`=`を使っていますが、`name3
=
name1;`という代入は、「この後ずっと`name3`と`name1`を同じ値にする」という意味ではなく、単に「その時点の`name1`の値を`name3`に代入するだけ」(以下同様)と言うのがわかればすぐにご理解いただけると思うのですが、いかがでしょうか?

