• 締切済み

初期化

はじめまして、質問お願い致します。 以下のソースでなぜ sum の変数を初期値を設定しないとエラーになるんでしょうか。 public static int getSum(int start, int end) { int sum = 0; for( int i = start; i <= end; i++) { sum = sum + i; } return sum ; }

みんなの回答

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.5

まあなんというか「なぜエラーなのか」については、「そう決めたから」 になるんじゃないですかね。 なぜそういうルールにしたか、ということならこれまでの回答にあるような理由で、ということでしょう。 http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html#11354 で色々仕様が決められていますが、ローカル変数については以下の通りです。 A local variable (§14.4, §14.13) must be explicitly given a value before it is used, by either initialization (§14.4) or assignment (§15.26), in a way that can be verified by the compiler using the rules for definite assignment ・ローカル変数は使用するより前に値を与えなければならない ・それは初期化によってでも、代入によってでも良い ・コンパイラはそれをチェックしますよ であると。 2nd ed.とあるのでちょっと古いものだと思いますが、この辺はそんなに 劇的に変わることはないと思います。 新しいのが見つけられればもっといいのですが。

すると、全ての回答が全文表示されます。
  • momozange
  • ベストアンサー率67% (21/31)
回答No.4

回答にいくつか間違った情報があるので訂正します。 Javaの仕様としては宣言時に初期化されなかった変数はデフォルト値への参照が行われます。 しかしローカルスコープに限ってはこの仕様が適用されません。 ローカルスコープに宣言した変数に関しては、初回の使用時までに「確実に」何かしらの参照を行う必要があります。 質問内容の場合も同様です。 慣習としてStringであればnullや空文字を、数値に関しては0や-1を初期値とすることが多いです。 別の言語を経験されているのであれば、少し違和感を覚えるかもしれませんね。 あと変数をよく「入れ物」という表現をしているのを見かけますが、個人的にはお勧めできません。 本格的にJavaを開発言語として使用するときに痛い目に会う可能性があります。 変数はあくまでも参照であり、その実態は別にあります。 せっかくJavaを勉強されているのですから、的確にその内容を理解したほうがよいでしょう。

すると、全ての回答が全文表示されます。
回答No.3

(プリミティブ型の)メンバ変数はデフォルトで初期化されますが、ローカル変数は初期化されません。 よってローカルで変数宣言した場合は初期値を設定しないとエラーになります。

すると、全ての回答が全文表示されます。
回答No.2

はじめまして。 私も初心者のころは同じことで悩み、理解するのに相当かかりました。 変数というのは、初期化しないで宣言するだけでは使えません。 宣言と言うのは int sum; という形です。 宣言の後に使用出来る状態にするには「初期化」という作業が必要です。 sum = 0;(宣言は別の場所で行い、初期化を別にしている) int sum = 0;(宣言と初期化を同時に行っている) イメージとしては、宣言して入れ物が出来る。 入れ物が出来て、何を入れるかを決めてあげないと(これが初期化ですね)機械は迷っちゃうということでしょうか。 以上で理解出来ますか? わからないようであれば、おっしゃってくださいね。

すると、全ての回答が全文表示されます。
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

初期化されていないということは、中身がどうなっているかわからない、 どんな値なのかわからないということなので、 プログラムの実行のたびに答えが違うというバグを 引き起こす原因になります。 ということでそういう事態にならないように チェックしているから。 ということで納得できますか?

すると、全ての回答が全文表示されます。

関連するQ&A