- ベストアンサー
違いはなんですか?
public static void main(String[] args) と public static void main(String args[]) の違いは何ですか? おしえてください。宜しくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
これは「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++が卓越であればあるほど)とても難しい概念だと思うので納得がいくまでいくらでも質問して良いよ。細かいことでもお答えしますんで。
お礼
詳しい説明ありがとうございます。 質問の続きなのですが、 (String ar[]) というのも同じなのでしょうか?? 宜しくお願いします。