目次
1. 参照型とは
参照型の変数には「アドレス」が格納されている。
その「アドレス」のメモリ上(一時的にデータを保管しておく場所)に、値が格納されている。
このように「アドレス」を参照し、値にアクセスする型の総称を「参照型」という。
オブジェクト(変数)の生成はnew演算子を使っておこなう。
nullは参照先がない状態のこと。
2. 参照渡しの理解
package jp.co.study.sample;
import java.util.ArrayList;
import java.util.List;
public class Qiita {
public static void main (String args[]) {
// ①さかなリスト作成
List<String> fishList = new ArrayList<String>();
fishList.add("まぐろ");
fishList.add("あじ");
// ②リスト更新メソッド呼び出し
updateList(fishList);
}
// ③リスト更新メソッド
private static void updateList(List<String> fishList) {
fishList.add("しゃけ");
fishList.add("さんま");
// ④出力
System.out.println(fishList.toString());
}
}
↑
①fishListの参照先の値には "まぐろ" と "あじ" が格納されている。
②fishListの参照を引数に、updateListメソッド呼び出し。
③fishListの参照先の値に "しゃけ" と "さんま" が追加される。
④さかなリストの出力結果は [まぐろ, あじ, しゃけ, さんま] となる。
※参照先の値を直接編集しているため、③でListをreturnする必要がない。
package jp.co.study.sample;
import java.util.ArrayList;
import java.util.List;
public class Qiita {
public static void main (String args[]) {
// ①さかなリスト作成
List<String> fishList = new ArrayList<String>();
fishList.add("まぐろ");
fishList.add("あじ");
// ②リスト更新メソッド呼び出し
updateList(fishList);
}
// ③リスト更新メソッド
private static void updateList(List<String> fishList) {
// ④鳥リスト作成
List<String> birdList = new ArrayList<String>();
birdList.add("すずめ");
birdList.add("カラス");
// ⑤引数で渡ってきたfishList = このメソッドで作成したbirdList
fishList = birdList;
// ⑥出力
System.out.println(fishList.toString());
}
}
↑
ひとつ前のソースと異なるのは④⑤。
⑤では、fishListのアドレス自体を、birdListのアドレスで上書きしているため、
さかなリストの出力結果は [すずめ, カラス] となる。
3. addAllの理解
package jp.co.study.sample;
import java.util.ArrayList;
import java.util.List;
public class Qiita {
public static void main (String args[]) {
// ①さかなリスト作成
List<String> fishList = new ArrayList<String>();
fishList.add("まぐろ");
fishList.add("あじ");
// ②リスト更新メソッド呼び出し
updateList(fishList);
}
// ③リスト更新メソッド
private static void updateList(List<String> fishList) {
// ④鳥リスト作成
List<String> birdList = new ArrayList<String>();
birdList.add("すずめ");
birdList.add("カラス");
// ⑤AddAll
fishList.addAll(birdList);
// ⑥出力
System.out.println(fishList.toString());
}
}
↑
ひとつ前のソースと異なるのは⑤。
AddAllの場合は、ふたつのリストがマージされるので、
さかなリストの出力結果は [まぐろ, あじ, すずめ, カラス] となる。
// ③リスト更新メソッド
private static void updateList(List<String> fishList) {
// ④鳥リスト作成
List<String> birdList = new ArrayList<String>();
birdList.add("すずめ");
birdList.add("カラス");
///// 追加 /////
fishList.clear();
// ⑤AddAll
fishList.addAll(birdList);
// ⑥出力
System.out.println(fishList.toString());
}
↑
ひとつ前のソースの⑤AddAllの直前に、fishList.clear();をすると、
fishListの値が削除されるため、出力結果は [すずめ, カラス] となる。