本連載では、試験範囲の中でもつまづきやすい部分や、理解しづらいトピックを紹介していきます。各回では、前半に技術解説、後半に確認問題を掲載します。ぜひ、実際に問題を解きながら理解を深めてください。なお、現在はSE 7とSE 8のいずれの試験も受験可能であるため、主に共通して出題されるトピックを扱うこととします。連載1回目となる本記事では、「値コピーと参照情報のコピー」について解説します。
Java言語の基本データ型と参照型
値コピーと参照情報のコピーの違いを説明する前に、まず、Java言語のデータ型について確認しましょう。 Javaでは、コード内で様々なデータ型の値を扱うことができますが、2種類に大別されます。
- 基本データ型
byte、short、int、long、float、double、char、booleanの8種類- 参照型
- クラス、配列、インタフェースなどを含む基本データ型以外の型すべて
基本データ型と参照型のいずれの値も実装処理で使用するだけでなく、メソッドの引数や戻り値にも使用できます。しかし、似たようなコードでも、どちらのデータ型を使用しているかによって、挙動に違いがあります。Silver試験でも出題率が高く、上位試験であるGold試験でも求められる内容なので、しっかりと押さえていきましょう。
引数・戻り値における基本データ型と参照型の違い
基本データ型の場合
それでは始めに、基本データ型の動きをサンプルコードで確認してみましょう。このサンプルは、メソッドの引数に基本データ型であるint値を使用します(Sample1.java)。
public class Sample1 {
public static void main(String[] args) {
int num = 10;
method1(num);
System.out.println("mainメソッド側:" + num);
}
public static void method1(int num) {
num += 10;
System.out.println("method1メソッド側:" + num);
}
}
3行目でint型の変数numに10を代入し、4行目ではmethod1()メソッドの呼び出し時に、num変数を引数値として指定しています。 7行目で、この引数値をnum変数で受け取り、8行目で10を加算して、9行目で出力しています。つまり、num変数の値は「20」です。その後、処理は呼び出し元に戻り5行目が実行されますが、出力結果は「10」です。
prompt>java Sample1 method1メソッド側:20 mainメソッド側:10
なぜ、5行目の出力が「20」にならないのでしょうか。
これは、メソッドの引数や戻り値に基本データ型を使用した場合、値のコピーがやり取りされるからです。
この記事は参考になりましたか?
- みちこ先生のオラクル認定Javaプログラマ Silver SE 7/8 合格コース連載記事一覧
- この記事の著者
-
山本道子(ヤマモト ミチコ)
2004年Sun Microsystems社を退職後、有限会社Rayを設立し、システム開発、インストラクタ、執筆業などを手がける。
著書に『オラクル認定資格教科書 Javaプログラマ Bronze SE 7/8』『同Silver SE 8』『同Gold SE 8』のほか、『SUN教科書 Webコンポーネントディベロッパ(SJC-WC)』、『携帯OS教科書 Androidアプリケーション技術者ベーシック』、『Linux教科書 LPICレベル1 スピードマスター問題集』(共著)、監訳書に『SUN教科書 Javaプログラマ(SJC-P)5.0・6.0 両対応』(いずれも翔泳社刊)などがある。月刊誌『日経Linux』(日経BP社刊)でLPIC対策記事を連載。
日々の楽しみは晩酌、好きな言葉は表面張力。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

