• ベストアンサー

仮引数について。

こんにちは。 現在Javaを勉強中の者です。 ある程度簡単なプログラムは組めるようになったのですが、 ふと仮引数について疑問に思ったことがあったので 質問させて下さい。 まず、自己紹介をするクラスがあるとします。 そこで、入力された名前を表示する、というメソッドを作りたいのですが (1) class Introduction {     /* メンバ変数 */    String strName;     /* 名前を言う */     public void sayName(String strName) {     System.out.println("私の名前は " + strName + " です。");   } } と書くのと (2) class Introduction {   /* メンバ変数 */   String strName;   /* 名前を言う */   public void sayName(String n) {     strName = n     ~~~~~~~~~~~~     System.out.println("私の名前は " + strName + " です。");   } } と書くのでは何がどう違うのでしょうか? 特に波線部分の役割の理解に苦しんでいます。 参考書のサンプルソースを見ると、 たいていこのような記述があるのですが わざわざ代入しなくても(1)のように記述すれば 正常に出力されますよね? 実引数から値を渡されたときは 必ず(2)のような書き方をしなければならない決まりが あるのでしょうか? 長くなりましたが、ご教授いただければ幸いです。 よろしくお願いします。

  • Java
  • 回答数2
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

特に決まりはないかと。 参考書読み進めていくと後でメンバ変数を使うからそう書いているだけかもしれず。

bun_1985
質問者

お礼

そうですか、特に決まりはないのですね。 確かにメンバ変数は後で使います。 早速のご回答ありがとうございました。

その他の回答 (1)

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.2

C言語とかだと ポインタ受け渡しで 引用もとのデータも変更されちゃうから 別の領域に格納して処理を行う っていう実装者の「癖」だと思う。 Javaの場合意味ないところか 無駄に領域を確保しようとするので 可読性上の理由がない限りは 避けた方がいいよ。

bun_1985
質問者

お礼

お礼が遅れまして申し訳ありません。 確かに、いちいち別の領域に格納していたら無駄になりますよね。 あれからいろいろプログラミングをしてみて 感覚的にわかったような気がします。 ご回答ありがとうございました。

関連するQ&A

  • 起動引数の表示

    Java勉強中の初心者です。 起動引数の表示について お尋ねしたいことがあります。 起動引数が入力された場合には そのまま表示、無い場合は ”起動引数無し” と表示させたいのですが 下記のソースだと java.lang.ArrayIndexOutOfBoundsException のエラーが発生してしまいます。 このような場合はどのようにしたら よいのですか? よろしくお願いします。 ---------------------------------------------- public class Ren1 { public static void main(String args[]) { if(args[0].equals(null)){ System.out.println("起動引数無し"); } String s = args[0]; System.out.println(s); } }

    • ベストアンサー
    • Java
  • 初歩的な メソッドの引数について

    参考書のサンプルなんですが、 Carクラスのメソッドの引数のところで num = n と代入しているのですが、 これを直接void setNum(int num)としたほうがらくだと思うのですがなにか意味があるのでしょうか? class Sample4{ public static void main(String args[]){ Car car1 = new Car(); car1.setNum(33); } } class Car{ int num; void setNum(int n){ num = n; System.out.println("台数" + num); } }

    • ベストアンサー
    • Java
  • 引数について教えてください。

    誰か教えてください。 今、このプログラム自体は引数に整数を2個入れたら加算されるように出来ていますがこれを何個入れても足せるようにしたいのですが、どのように変更したらいいのか分かりません。 すみませんが、お願いします。 public class Sample20 { public static void main(String[] argv) { if(argv.length != 1) { if(argv.length>=2) { int a,b; try { if(argv[0].indexOf(".") == -1 && argv[1].indexOf(".") == -1) { try { a=Integer.parseInt(argv[0].replaceAll("\\+" , "")); b=Integer.parseInt(argv[1].replaceAll("\\+" , "")); System.out.println(a+b); } catch(NumberFormatException e) { System.out.println("最大9桁までしか実行できません"); } } else { System.out.println("小数点は整数ではないので実行できません"); } } catch(Exception e) { System.out.println ("エラー:2個整数のみ入力して下さい"); } } else { System.out.println("エラー:何も入力されていません"); } } else { System.out.println("エラー:引数が一つしか入力されていません"); } } }

    • ベストアンサー
    • Java
  • 変数を引数に取る??

    高橋麻奈著「やさしいJava」で独学中の初心者ですがよろしくお願い致します。 「やさしいJava」P481のソースで質問なのですが、 class Company { private int sum=0; public synchronized void add(int a) { int tmp=sum; System.out.println("現在の合計金額は"+tmp+"円です。"); System.out.println(a+"円稼ぎました。"); tmp += a; System.out.println("合計額を"+tmp+"にします。"); sum=tmp; } } class Driver extends Thread { private Company comp; public Driver(Company c)   //地点1-1 {comp = c;}         //地点1-2 public void run() { for(int i=0;i<3;i++) {comp.add(50);} } } class Sample7 { public static void main(String args[]) { Company cmp=new Company(); Driver drv1=new Driver(cmp);    //地点2 Driver drv2=new Driver(cmp); drv1.start(); drv2.start(); } } ・・・・・・・・・・・・・・・・・・・ 質問 地点1-1では、Driverのコンストラクタにて「Companyクラスの変数c」を仮引数にとっていると思います。 そして地点2では、Driverクラスのオブジェクトdrv1を作成し、引数にCompanyクラスの変数cmpを代入していますよね? ということは地点1-1及び1-2の{comp=c}にあてはめると、「仮引数cに変数cmpを代入し、さらにcompにcmpを代入する」という ことでしょうか??メソッドの引数に変数を取るという考え方がわかりません。 また、compとcmpの違いについて教えていただけると嬉しいです。どうかよろしくお願い致します。

    • ベストアンサー
    • Java
  • コマンドライン引数の*(アフタリスク)の表示について教えて下さい

    皆様どうぞよろしくお願い申し上げます。アドバイス下さい。 java言語で質問です。調べたかぎりわからないことが起こりました。次のものです。コマンドライン引数で引数1は数字、引数2は数字、引数3は* で表示させるプログラムを作りました。引数3番目の演算子*(アフタリスク)を表示する場合にうまく表示できません。 C:\java>java test 2.0 15.0 * 2.0 15.0 Calculation.class ←表示されません。 プログラムは以下のものを作りました。見てください。 /** * 実行クラス:引数テストクラス */ class test{ public static void main(String args[]) { //引数を取得 double num1 = Double.parseDouble(args[0]); //引数1(数値) double num2 = Double.parseDouble(args[1]); //引数2(数値) String kigou = args[2]; //引数3(計算記号) //画面に出しています。 System.out.println(num1); System.out.println(num2); System.out.println(kigou); } }

  • 引数を指定しなければならないサンプルプログラムをeclipseでデバッグする方法について

    お世話になります。 表題のとおりなのですが、Allin one eclipse 3.5.0の環境に於いて引数を指定しなければならないサンプルプログラムを実行すると、本来なら引数を聞いてこなければならないところ、そのような振る舞いもなくエラーになります。 サンプルプログラムは以下の内容となります。 class List1{ public static void main(String[] args){ //1つ目の引数args[0]を表示します System.out.println("1つ目の引数:" + args[0]); //2つ目の引数args[1]を表示します System.out.println("2つ目の引数:" + args[1]); } } どなたか問題点がわかる方、ご教示願います。 よろしくお願いします。

  • switch で疑問。java超初心者です。

    まず、 public class P1{   public static void main(String[] args){     int n = 1;       switch(n){         case 0:           System.out.println("あ");           break;         case 1:           System.out.println("い");           break;         case 2:           System.out.println("う");           break;         default:           System.out.println("え");       }   } } は、当然「い」と表示されますよね。 default: をcase 3:にしても、問題なく「い」と表示されました。 そこで、こんな風にしてみました。 public class P3{   public static void main(String[] args){     int n = 1;     String s;       switch(n){         case 0:           s="あ";           break;         case 1:           s="い";           break;         case 2:           s="う";           break;         default:           s="え";       }       System.out.println(s);   } } これは「い」と表示されましたが、 default: をcase 3:にすると、エラーとなってしまいます。なぜでしょう。 ちなみに、エラーの内容は 変数 s は初期化されていない可能性があります。     System.out.print(s);                ^ というものでした。 そこで、 変数 s を初期化してみようと、次のように変数 s の宣言の後に null を代入しました。 String s=null; すると、「い」と表示され、エラーは出ません。 なぜ、このようになるのでしょうか。 String型の変数を使っていて、今まではこのようなエラーは出た事が無かったのですが、 どうやらswitch文の中では、初期化しろ、と出てくるようです。 わかり易い解説をいただければと思います。 これは仕様だということで、この通り受け入れるしかないのでしょうか。 勉強していて、少々腑に落ちないので、質問致しました。 よろしくお願いいたします。

    • ベストアンサー
    • Java
  • 引数について質問

    私プログラミング初心者ですので、できるだけ優しい解説をしていただければ幸いです! 引数について、以下のような解説がありました。 「引数には仮引数と実引数の2種類が存在する。仮引数は、関数を定義する際に変数で指定する引数である。また、実引数は、プログラムの実行時に関数に引き渡される値となる引数である。つまり、関数の実行時には、実引数の値が仮引数に代入されることになる。」 質問:1「関数を定義する際に変数で指定する引数である。」という記述の中で「関数を定義」とありますが、実際のソースコードにおいて何に対応するかわかりません。簡潔なソースコードを交えて解説していただければ幸いです。 質問2:「関数を定義」に限らず、プログラミングにおいて「定義」という言葉をよく見ますが、これは本質的にどういう意味をもっているのでしょうか?具体的なソースコースコードを交えて解説してくださると幸いです。 もしかして、その定義とは例えば「public static void main(String arg[]){」のような「メソッド宣言」のことですか? 質問3:「関数の実行時には、実引数の値が仮引数に代入されることになる。」と書いてありますが、 これはどういうことですか、僕が実際にソースコードで記述してみるので、その考えが正しいか判定してください package 第4章; public class A { public static void main(String arg[]){ double x; x=Math.sqrt(2.0); System.out.println("2.0の平方根は"+x); } } 僕の考え:String arg[]が仮引数で、実引数2.0がString arg[]に代入されるってことでしょうか? 「定義」といえば、上記のソースコードでは、public static void main(String arg[]){ 以外見当たらないので、、 僕の考え2:Mathクラスは、標準クラス(javaが最初から備えているクラス)だから、プログラマが「関数を定義」しなくても予め関数が定義されているから、関数を定義する必要がない、ということでしょうか?

    • ベストアンサー
    • Java
  • 単体テストのテストケースにて引数に値を入れたいです

    使用言語:JAVA言語 単刀直入ですが、djunitでの単体テストのメソッドの引数に値を設定したいですがどうすればいいのでしょうか? 引数がString型 Messageクラス public class Messages { public String getMessage(String message) { return message ; } } テストケース作成 public void testGetMessage001() { System.out.println("[testGetMessage001]"); Messages messages = new Messages(); System.out.println(messages.getMessage("Hello")); } とやれば、インスタンス生成してgetmessageメソッドにHelloが入ります。 問題は次の場合で仮にAxxクラスとして Public class Axx{     Public void getAxx(HttpServletRequest request){ ~処理~ } } 引数に(クラス名 オブジェクト名?) この場合、テストケースに Axx axx = new Axx(); System.out.println(messages.getAxx("????")); のようにMessageクラスと同じようにできるのでしょうか? それとも別の方法でHttpServletRequest requestに値をセットできる方法があるのでしょうか? よろしくお願い致します。

    • ベストアンサー
    • Java
  • コマンドライン引数を用いて。

    コマンドライン引数を用いて足し算をさせるプログラムです。 class goukei{ public static void main(String args[]){ int i, count; int sum = 0; int a[]; count = args.length; for(i=0; i<args.length; i++){ int arg_i = Integer.parseInt(args[i]); sum = sum + arg_i; } System.out.println("引数の数は" + count); System.out.println("合計は" + sum); } } と考えたのですが、もっとこうしたほうがいいという部分があれば教えてください。 一応これでできているとは思うのですがイマイチ自信がありません・・・。

    • ベストアンサー
    • Java

専門家に質問してみよう