5.9 メソッドのオーバーロード 5.10 変数の引渡し 2003/11/21 紺野憲一 Java入門 5.9 メソッドのオーバーロード 5.10 変数の引渡し 2003/11/21 紺野憲一
メソッドのオーバーロード メソッドのオーバーロード 引数の数や型が違えば同じ名前の変数を複数個利用できる。 引数の数や型が違えば同じ名前の変数を複数個利用できる。 例) int mes(int a,int b,int c) int mes(int a,int b,int c,int d) int mes(int a,int b,double c) これは同時に宣言する事ができる。
引数の引渡し メソッドに引き渡した変数をメソッド内部で変更しても外部での値は変わらない。これはメソッドに引き渡される値は別個に用意して用いられるためである。 しかし、配列やオブジェクトを引き渡す場合その参照(Cで言うポインタ)が引き渡されるため変更が外部まで影響される。 ※参照(ポインタ):変数や配列が保存されているメモリの場所を指す。
引数の受け渡し例1 メソッドaに ・int i ・int j[3] ・StringBuffer sb の3つを受け渡し した2つは自動的に参照受け渡しになる。 class Mozii { public static void a(int i,int j[],StringBuffer sb) { i=5; j[0]=6; sb.append("efgh"); } public static void main(String args[]) { int a=1,b[]={2,3,4}; StringBuffer sb=new StringBuffer("abcd"); System.out.println(a+" "+b[0]+" "+b[1]+" "+b[2]+" "+sb); a(a,b,sb); }} 出力結果 1 2 3 4 abcd 1 6 3 4 abcdefgh
引数の受け渡し例2 henkouにtの参照のコピーが渡される。 ここではhenkou中でjの参照を変更している。 メイン中では元のjの位置を参照するので値は変わらない。 class Mozii { public static void henkou(int j[]) { int t[]={6,7,8}; j=t; } public static void main(String args[]) { int b[]={2,3,4}; System.out.println(b[0]+" "+b[1]+" "+b[2]); henkou(b); }} 出力結果 2 3 4 2 3 4
問題 (1)コマンドラインから数を2個から4個入力しその和を出力するプログラムを作れ。 (2)例2で関数の実行後に値が変わるようにするにはどうすればよいか答えよ。
回答 c=Integer.parseInt(args[2]); (1) d=Integer.parseInt(args[3]); tasu(a,b,c,d);} if(args.length==3){ a=Integer.parseInt(args[0]); b=Integer.parseInt(args[1]); tasu(a,b,c);} if(args.length==2){ tasu(a,b);} }} (1) class Mozii { public static void tasu(int a,int b,int c,int d) { System.out.println(a+b+c+d); } public static void tasu(int a,int b,int c) { System.out.println(a+b+c); public static void tasu(int a,int b) { System.out.println(a+b); public static void main(String args[]) { int a,b,c,d; if(args.length==4){ a=Integer.parseInt(args[0]); b=Integer.parseInt(args[1]);
回答 (2)メソッド内部のみ public static void henkou(int j[]) { int t[]={6,7,8}; j[0]=t[0]; j[1]=t[1]; j[2]=t[2]; }