質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

2回答

1841閲覧

【Java】代入先の値を変更すると代入元の値も変わる

djfjamf

総合スコア18

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2021/07/15 09:17

Javaに関する質問です。

以下のように、すでに値が入っている状態のTestBの中の値listAをTestAに代入して

//testBにはすでに値が入っているとする TestB testB; TestA testA = testB.getListA().get(0);

その後、testAのある変数に値をセットすると、

testA.setHoge("テスト"); String a = testB.getListA().get(0).getHoge(); //a=テストになる

testB.getListA()の同じ変数も"テスト"になるのですが、
Javaとしてこれが正しい動きなのでしょうか。

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kazuma-s

2021/07/15 15:22

TestAクラス,、TestBクラス、getListAメソッド、setHogeメソッドなどの 定義の例を具体的に書いてください。 testB のどのフィールドに値がはいっているのかを書いてください。 質問は編集できます。質問に追記してください。
guest

回答2

0

ベストアンサー

よくある参照先への変更が・・・
とは、異なるパターンの質問ですね。

そもそも以下の2つのコードは同じだと思いますが。
違うものと認識していますか?

java

1TestA testA = testB.getListA().get(0); 2testA.setHoge("テスト");

java

1testB.getListA().get(0).setHoge("テスト");

どちらもtestBへの変更(setHoge)をしていますが、それを冗長に変数代入をしているかの違い
じゃないでしょうか。


追記

そもそも以下の2つのコードは同じだと思いますが。
違うものと認識していますか?

違うものだと認識していました。testAで代入した時点で別物になるんだとてっきり。

代入しても同じものというのを確認できると思います。

java

1testB.getListA().get(0).setHoge("テスト"); 2 3TestA testA = testB.getListA().get(0); 4testB.getListA().get(0).setHoge("TestBを変更"); 5 6System.out.println(testA.getHoge());

投稿2021/07/15 10:00

編集2021/07/15 15:17
momon-ga

総合スコア4820

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

djfjamf

2021/07/15 10:10

違うものだと認識していました。testAで代入した時点で別物になるんだとてっきり。
momon-ga

2021/07/15 15:22 編集

おー。それは勘違いですね。< 代入した時点で別物 代入した時点で別物になるとしたら、同じ変数以外の全ての==は、falseになりますね。 TestA testA = testB.getListA().get(0); System.out.println(testA == testB.getListA().get(0)); // false?
guest

0

仰っている意味が分かりませんが。

まずC言語やC++を理解すると尚わかりやすいです。

Javaでは

Test1 test1 = new Test1();

のようにやりますが、C++では。

C++

1Test1* test1 = new Test1();

となります。

いわゆるポインタです。

Javaも一応ポインタに相当するものだと思います。でも意識せずに使わせるために表現していないだけです。

C++でのnew/delete は動的確保です。

Javaではこのポインタに相当する参照で保持しています。

おそらくJVMがポインタを介した動的確保として見なしているのだと思います

投稿2021/07/15 09:24

BeatStar

総合スコア4958

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問