• ベストアンサー

違いはなんですか?

public static void main(String[] args) と public static void main(String args[]) の違いは何ですか? おしえてください。宜しくお願いします。

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

  • ベストアンサー
  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.2

これは「argsの型は何?」というお話になるな。 実は、Javaでは配列は全てarrayクラスのサブクラスになる。つまり、argsは「String」型の「配列」ではなく、「Stringの配列」型の変数という事だ。具体例を示すと、 String[] s = new String[3]; // String[3]型のインスタンスが作られる s[0] = new String("aaa"); // String型のインスタンスが作られる s[1] = new String("bbb"); s[2] = new String("ccc"); これがどういう事かと言うと、1行目ではString[3]型のインスタンスが作成されるが、この時点ではStringのインスタンスは一つも存在しない。  君の質問文にある下の方の行をコンパイルしてもバイトコードは上の行のものになる。「Stringの配列」型の変数argsが出来るんだな。実際Javaに「変数の配列」という概念はない。じゃあなぜこんな書き方も許されるかというと、CやC++からの移行に際して、Cに慣れた人に対する配慮だと思われる。でも実際はそれが逆にこういう混乱を招く結果になったと私は思うね。 String[] s = new String[3]; これはC++風に言うとString型へのポインタを3つ含むインスタンスを作ったという事になる。 (CやC++が卓越であればあるほど)とても難しい概念だと思うので納得がいくまでいくらでも質問して良いよ。細かいことでもお答えしますんで。

upupu
質問者

お礼

詳しい説明ありがとうございます。 質問の続きなのですが、 (String ar[]) というのも同じなのでしょうか?? 宜しくお願いします。

その他の回答 (2)

  • davosuke
  • ベストアンサー率61% (34/55)
回答No.3

ANo.2 に対しての回答。 main(String args[]) main(String ar[])も同じものです。 ただ、mainメソッド内で使用する実行クラスのパラメータを格納する配列の変数名がargからarに変わります。

  • davosuke
  • ベストアンサー率61% (34/55)
回答No.1

違いは特にありません。ただのStringオブジェクトの配列です。開発システムではプログラミング規約等でどちらで統一するか、決定する要素の一つですね。 好きなほうでコーディングしてよろしいですよ。

関連するQ&A