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

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

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

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

Q&A

解決済

3回答

4101閲覧

インスタンスとListについての初歩的な質問

lupus_dingo

総合スコア257

Java

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

0グッド

0クリップ

投稿2015/02/03 06:42

初歩的な質問ですが、aとbの結果って同じでしょうか?
ClassA a = new ClassA();
ClassA b = getClassA();

ClassA getClassA(){
ClassA c = new ClassA();
return c;
}

あと、Listの中身を初期化する方法として以下の2つ思い浮かぶのですが、違いってなんでしょうか?
List<ClassA> aList = new ArrayList<ClassA>();
aList.add(a);

aList.clear(); 1つ目
aList = new ArrayList<ClassA>(); 2つ目

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

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

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

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

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

guest

回答3

0

1つ目の質問の回答は”同じ”です。
ClassA b = getClassA();のようにやると、
getClassA()内でクラスの初期設定などを出来るので、
クラスの使い方によっては便利です。getClassA()に引数を追加するなど。

2つ目の質問は、前の方々も言ってますが、
たとえるなら”箱の中身を消す”か、”新しい箱を用意する”の違いですね。

投稿2015/02/04 09:39

runun

総合スコア305

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

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

lupus_dingo

2015/02/05 03:39

簡潔でわかりやすい回答ありがとうございます。
guest

0

ベストアンサー

前半の質問
どちらも結局new ClassA()をしてその返り値を使っていることに変わりはないので同じです。
ただし、当然ですがご質問のaとbは別のオブジェクトです。

後半の質問
リストを紙に書いた表に例えるならば
1つ目は表に書いた項目をすべて消すこと
2つ目は新たに別の紙を持ってきて表のひな形を作ること
に相当します。(厳密には参照の問題で違いますが)
実用上の問題としては2つ目の方法だとメモリに空きが無かった場合(上記の例えで行けば新たな紙が無い場合)に
例外を出す可能性があるくらいの差だと思われます。

投稿2015/02/03 08:05

swordone

総合スコア20649

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

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

lupus_dingo

2015/02/05 03:16

回答ありがとうございます。 メモリを考えるとなるべくnewはしない方がいいということですね。
guest

0

前者は、「結果が同じ」の定義が不明なので、
下記の2つはほぼ同じ処理と答えておきます。

lang

1ClassA a = new ClassA(); 2ClassA b = getClassA(); 3 4ClassA getClassA(){ 5 ClassA c = new ClassA(); 6 return c; 7}

lang

1ClassA a = new ClassA(); 2ClassA b = new ClassA();

後者は、変数が指すインスタンスが変わります。

lang

1List<ClassA> aList = new ArrayList<ClassA>(); // インスタンス1が生成される 2// aListはインスタンス1を指している 3// 4// aList -> インスタンス1 5 6aList.add(a); 7 8aList.clear(); 1つ目 // インスタンス1のフィールド(内部配列と配列サイズ)がクリアされる 9aList = new ArrayList<ClassA>(); // 2つ目 // インスタンス2が生成される 10// インスタンス1は破棄される 11// aListはインスタンス2を指している 12// 13// インスタンス1 <-誰からも参照されなくなったので、あとでGCされる 14// aList -> インスタンス2

投稿2015/02/03 07:56

argius

総合スコア9388

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

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

lupus_dingo

2015/02/05 03:38

回答ありがとうございます。 GCというのはガベージコレクションのことでしょうか? clearメソッドを使う方がメモリ上よさそうですね。
argius

2015/02/05 04:07

GCはガベージコレクションのことです。 clearメソッドを使うのは効率のためということもありますが、コーディングスタイルとして、参照型(クラスや配列)の変数は再代入しない(使い回さない)ことが一般的です。理由はここでは書ききれないので、「変数の使い回し」などのキーワードで調べてみてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問