[問題] 一題跟變數初始化有關的問題

看板java作者 (adam!)時間3年前 (2020/07/25 21:33), 3年前編輯推噓1(107)
留言8則, 4人參與, 3年前最新討論串1/1
public class Test { static int result; public static void main(String[] args) { double x ; if( result == 0 ){ x = 10.0; System.out.println("123"); } System.out.print(x); } } 最後要印出x的值的時候會出現編譯錯誤 說 x 沒有初始化 一開始我懷疑if沒有進入 所以print 123 結果有印出123,表示有進入 然後我把if的條件直接改成true就可以印出x 請問這是什麼原因呢? 先謝謝各位高手的幫忙~ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 180.177.13.6 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/java/M.1595683997.A.969.html

07/25 21:41, 3年前 , 1F
local variable 沒有初始值 只有class variable有
07/25 21:41, 1F
但是我在if裡面有給值了呀 ※ 編輯: awpadam (180.177.13.6 臺灣), 07/25/2020 21:48:37

07/25 22:05, 3年前 , 2F
你加個else {x = 0.0} 應該就會過了
07/25 22:05, 2F

07/25 22:09, 3年前 , 3F
編譯器只要抓到區域變數有可能尚未初始化就不會讓你過
07/25 22:09, 3F

07/25 22:11, 3年前 , 4F
以你的例子來說 萬一 result != 0, x 就不會初始化
07/25 22:11, 4F
原來如此,我了解了。謝謝你的幫忙 ※ 編輯: awpadam (180.177.13.6 臺灣), 07/25/2020 22:14:35

07/25 22:16, 3年前 , 5F
必須是所有路徑都有初始化才叫有初始化
07/25 22:16, 5F
你的意思是說所有的分支條件嗎? ※ 編輯: awpadam (180.177.13.6 臺灣), 07/25/2020 22:17:58

07/25 22:44, 3年前 , 6F
那問你個問題,如果你的 result 不等於零, 你期望double
07/25 22:44, 6F

07/25 22:44, 3年前 , 7F
會印出來什麼東西呢?
07/25 22:44, 7F

07/25 22:45, 3年前 , 8F
x才對,不是double,用錯詞。
07/25 22:45, 8F
我沒想到java的編譯器這麼嚴格,會幫我考慮其他狀況 蠻貼心的XD ※ 編輯: awpadam (180.177.13.6 臺灣), 07/25/2020 22:58:11
文章代碼(AID): #1V73ITbf (java)
文章代碼(AID): #1V73ITbf (java)