2017-02-10 21 views
-2

void戻り値の型は、スタックの周りを維持する必要がないことを意味します。実際にはそうですか?voidメソッドでスタックオーバーフローエラーが発生する可能性がありますか?

+3

メソッドの戻り値の型がvoidであっても、スタック上にスペースを必要としないというわけではありません...すべてのローカルはどうですか?要するに:はい、スタックオーバーフローエラーは完全にvoidメソッドで可能であり、それを実証するのは非常に簡単です。 –

+5

この 'void test(){テスト();}を試してください。 } ' –

+0

voidメソッドは簡単に末尾再帰的に行われるようですので、可能であればこれらのエラーは簡単に回避できますか? –

答えて

2

はい可能です。スタックオーバーフローは、コールスタックポインタがスタックに束縛された値を超えた場合に発生します。例えば

void helloWorld() { helloWorld();} 

これは、無限再帰を引き起こすため、スタックオーバーフローします。

また、Javaでは末尾再帰の最適化もサポートされていません。

+0

'' void'メソッドは末尾再帰的に作られているようですので、可能であればこれらのエラーは簡単に回避できますか? –

+0

私は参照してください。 Javaは末尾再帰の最適化をサポートしていません。したがって、コンパイラはテールの再帰関数をループに変換しません(たとえば、scalaはそれをサポートしています)。コードを変更する必要があります。 – gkatzioura

関連する問題