java方法遞迴調用的陷阱

來源:互聯網
上載者:User

      上個星期修改了簡訊網關的重啟程式,結果這周又遇到了新問題。雖然有時可以重啟成功,但是有時候還是重啟失敗。本地類比測試怎麼都沒發現這個問題,趁著閑時的功夫,自己到正式環境將日誌分析了一下,發現重啟不成功的原因主要在心跳3次後沒有收到響應訊息,程式不會自動重啟,而是不斷的繼續發送心跳。

      看了看代碼,沒有發現哪裡有錯啊。想了想,難道是由於方法遞迴調用的原因?於是自己弄了個簡單的測試,來驗證: 

 public static boolean tests(int  i){        if(i>5){            return false;        }        if(true){           tests(++i);        }        return true;    }

 

    好小子,果然是這裡的問題,原來是由於tests()方法調用了tests()方法後,每個test()方法都有自己的傳回值,只有第一層的tests()方法才會把自己的傳回值輸出給調用他的程式。

   例如:若有程式調用了tests(1)後,tests(2)將傳回值返回給了tests(1),tests(3)將傳回值返回給了test(2),以此類推。運行完tests(5)後,tests(1)還會向下執行,最後結果不論如何都是true.

  所以要想這裡的結果正確,設定一個標誌位接收每個tests()方法返回的值即可。

 

public static boolean tests(int  i){        boolean flag = false;        if(i>5){            return false;        }        if(true){          flag =  tests(++i);        }        return flag;    }

這樣才會得到想要的結果。

 

特此警示:遞迴調用關於傳回值的陷阱

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.