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

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

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

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

Q&A

解決済

5回答

440閲覧

Java基本文法 挙動

Chandler_Bing

総合スコア673

Java

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

2グッド

1クリップ

投稿2019/03/05 07:39

Javaのインスタンス化の挙動について少し納得できない事があります。
以下はDBから全件取得し、それをインスタンスに化し、リストに挿入というコードです。

Java

1 while (rs.next()) { 2 String id = rs.getString("ID"); 3 String name = rs.getString("NAME"); 4 int age = rs.getInt("AGE"); 5 Employee employee = new Employee(id, name, age); 6 empList.add(employee); 7 }
Employee employee = new Employee(id, name, age); empList.add(employee);

この部分ですが毎回 「Employee employee」 が生成されることになりますが同じ 「employee」を何度も使用して良いのですか。

Java

1Sample sample1 = new sample(); 2Sample sample2 = sample1;

のようにするとsample1,2共に同じところを指しますよね。ですので以下のようにするべきではと思いました。

Java

1while (rs.next()) { 2 String id = rs.getString("ID"); 3 String name = rs.getString("NAME"); 4 int age = rs.getInt("AGE"); 5 empList.add(new Employee(id, name, age)); 6 }
bochan2, DrqYuto👍を押しています

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

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

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

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

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

m.ts10806

2019/03/05 07:49

自分が作ったコードなのに納得いかないという矛盾をどうにか説明いただけませんか。
azuapricot

2019/03/05 08:24

同じ employee という見た目ですが 中身はインスタンス化(new Employee)されるたびに変わってますよね。良いのではないでしょうか。 もしemployeeという変数を何度も使ってるけど大丈夫?っていう質問なら ほかのint ageとかにも同じことが言えますしそこらへんはきっと理解してるんですよね
azuapricot

2019/03/05 08:25

もし何度も生成するのが嫌なら外でインスタンス化するとかな気もしますけどEmployeeの中身が見えないからな~
guest

回答5

0

ベストアンサー

while の中で使っている他の変数 id, name, age については同じ疑問を持ちましたか?
もし、持ったなら
empList.add(new Employee(rs.getString("ID"), rs.getString("NAME"), rs.getInt("AGE")));
と書くべきなのでは とは思いませんでしたか?
Sample sample1 = new sample();
Sample sample2 = sample1;
と,
while 文の中で宣言された変数 name, employee への代入の繰り返しを比べるのは適切ではないです。

while 中で宣言された変数は、while のループの度に違うものになります。
while の外で宣言された empList はループ中でも、while を抜けた後でも同じです。

投稿2019/03/05 12:47

編集2019/03/05 15:54
katoy

総合スコア22324

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

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

0

java におきましては, 変数の宣言のことを「生成」とは表現していないと思います.
(インスタンスの)生成と言いますと, new Employee(id, name, age) のほうではないでしょうか.

employee は変数ですので, 何度でもご使用出来ます.

直後に empList.add し, その後の使用もありませんので, empList.add(new Employee(id, name, age)); と書くことも出来ますし, 慣れていればその様に書くことが多いとは思いますが, 間違いでは御座いませんし, するべき かどうかは状況や嗜好に因るかと思います.

投稿2019/03/05 07:58

jimbe

総合スコア12545

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

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

0

それでOKです

Employee employee = new Employee(id, name, age);

は、いったん変数に入れてそれをAddしてるだけなので、やってることは一緒です

投稿2019/03/05 07:49

y_waiwai

総合スコア87719

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

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

0

mtsさんもよくいわれてますが、自分で検証する最低限のコードを書けるようになるといいです。

java

1List<String> arrayL = new ArrayList<String>(); 2 3String s = "違う"; 4 5arrayL.add(s); 6s = "同じ"; 7 8arrayL.add(s); 9arrayL.add(s); 10 11for (String string : arrayL) { 12 System.out.println(string); 13}

もしスコープが同じ変数の格納で同じ値になるのであれば、三回”同じ”が表示されるはずですが、
実際には、異なります。
スコープの話が、いくつかでてますが同じスコープだろうが関係ないことがわかります。
※もし、Javaのバージョンで異なるようだったらゴメンなさい

代入のたびに異なるオブジェクトを作って生成してるので、格納されるものが違うというだけの話です。

わかりやすいのは、katoyさんかもしれませんが、本質的に正しいのはjimbeさんの、つどnewしてるから
で良いかと思います。

投稿2019/03/06 02:53

momon-ga

総合スコア4820

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

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

momon-ga

2019/03/06 03:24 編集

katoyさんの回答が正しくないという意味でなく、ループの話(やスコープ)の話は本質的な部分じゃないという意味です<本質的に正しい
guest

0

この部分ですが毎回 「Employee employee」 が生成されることになりますが同じ 「employee」を何度も使用して良いのですか。

※1文字1文字別のリンクにしています。必ず全て熟読、ミニマムコードで試すこと


同じ回答何度もされてますが、いい加減理解してください。
理解しようとしてください。取り入れてください。

PHPでもJavaScriptでもJavaでもプログラミング言語には殆どスコープという概念はあるし、
それを理解しないことにはまともにプログラミングできません。
120も質問していて同じ回答されてるって相当ですよ。

この質問を除いた119の質問、あと解決済みになったものもそれなりにあると思いますが、
あなたにとっては何なのでしょうか。資産ではないのでしょうか。
時間の無駄をこれ以上重ねないでください。

投稿2019/03/05 07:52

編集2019/03/05 08:03
m.ts10806

総合スコア80765

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

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

m.ts10806

2019/03/05 07:53

この回答 何回目かなあ。そろそろ真剣に理解して欲しいなあ
swordone

2019/03/05 08:31

時々現れる「触れちゃいけないタイプの質問者」なのでは…
m.ts10806

2019/03/05 08:34

そうですね。ここまで無神経というか別の意味で図太いのは厄介すぎますね。 私がよく対応するphpの方にも頻出するのでかなり悩ましいところです。次から通報だけにしておきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問