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
」にならないのでしょうか。
これは、メソッドの引数や戻り値に基本データ型を使用した場合、値のコピーがやり取りされるからです。