Java - メソッドと引数

メソッドと引数

メソッドに引数を与える書式は次のようになります。

public static void main(String args[]){
  メソッド名(値1, ...);
}

修飾子 戻り値の型 メソッド名(データ型 変数名1, ...){
  ...
}
メソッドと引数

メソッドを呼び出す時に渡したい値は括弧内に記述します。複数の値を渡す場合はカンマで区切って記述します。

メソッド側では渡された値を格納するためにデータ型と変数名を記述します。この変数を引数と呼びます。引数は、渡される値の数だけ記述する必要があり、渡される値と同じデータ型で宣言します。

public static void main(String args[]){
  add(2, 3); // 5
}

private static void add(int a, int b){
  System.out.println(a + b);
}
メソッドと引数

引数は、メソッドが呼び出される毎に、その時に指定された値が代入されます。引数に記述された変数は、メソッド内で使用することができます。

また、引数には基本データ型だけでなく、クラスから生成したオブジェクトや配列も渡すことができます。参照型変数のページにもあるとおり、配列などは実際の値が格納する領域の位置だけを管理しています。そのため、メソッドを呼び出すときに配列を指定すると、引数には実際の値が格納する領域の位置が代入されます。

public static void main(String args[]){
  int num[] = {1, 2};
  sample(num);
}

private static void sample(int num[]){
  System.out.println(num[0]); // 1 
  System.out.println(num[1]); // 2
}
メソッドと引数

そのため、メソッド側で配列の要素に対して変更を行った場合、呼び出し側の同じ要素に対しても変更されてしまいます。

public static void main(String args[]){
  int num = 5;
  int arr[] = {5};

  System.out.println(num);    // 5
  System.out.println(arr[0]); // 5

  sample(num, arr);

  System.out.println(num);    // 5
  System.out.println(arr[0]); // 10
}

private static void sample(int num, int arr[]){
  num = 10;
  arr[0] = 10;
}
メソッドと引数

上記の場合、基本データ型の変数である num は値がコピーされて引数に代入されます。(値渡し) そのため、メソッド側で変数の値を変更しても呼び出し元の変数の値には影響しません。それに対して配列変数の arr は配列の領域の位置が引数に代入されます。(参照渡し) そのため、メソッド側で配列の要素の値を変更すると呼び出し元の配列の要素の値も変更されます。

可変引数

引数の指定において、可変個の引数を持つメソッドを定義することも可能です。可変個の引数を持つメソッドの書式は次の通りです。

修飾子 戻り値の型 メソッド名(データ型... 変数名){
  ...
}
可変引数

可変個の引数を持つメソッドを呼び出す場合、引数を任意の数だけ記述できるようになります。

public static void main(String args[]){
  sample(1, 2, 3);
}

private static void sample(int... num){
  for (int i = 0; i < num.length; i++){
    System.out.println(num[i]);
  }
}
可変引数

ただし、引数のデータ型はすべて同じである必要があります。また、可変引数の場合、引数の数は 0 でも問題ありません。

可変引数は、通常の引数と組み合わせて使用することもできます。

public static void main(String args[]){
  sample("[", "]", 1, 2, 3);
}

private static void sample(String a, String b, int... num){
  for (int i = 0; i < nums.length; i++){
    System.out.println(a + num[i] + b);
  }
}
可変引数と通常の引数の組み合わせ

通常の引数と可変引数を組み合わせる場合、必ず通常の引数から記述する必要があります。また、可変引数はひとつしか記述できず、最後に記述しなければなりません。

関連記事