2016-12-13 5 views
0

多分同じような質問がたくさんあるので2016年の私の質問は非常にばかげているかもしれませんが、いつ最終的な変数をいつ使うべきか理解するのは難しいですローカル変数の代わりに。どちらがより効率的になり、いつ使用するべきですか。いつローカル変数の代わりに最終変数を使うべきですか

public void setmethod(int var) 
{ 
     final int variable = var; 
     System.out.println(variable); 
} 

public void setmethod(int var) 
{ 
     int variable = var; 
     System.out.println(variable); 
} 

私は、出力の結果が同じで、また、その最終的な分野になることを知っている - 同じフィールドが不変の参照が、その一つの選択肢は、特定の状況下で、より効率であるとすることとされましたなぜ??私はちょっと混乱しています

+0

あなたは 'var'パラメータを呼び出しています。違いはありません –

+1

両方の変数はローカルです。 – shmosel

+0

'Final'は変数の値が変更されないことを意味します。オブジェクトまたはメソッドの特定のスコープ内で同じ意味を持ちます。 – MaxZoom

答えて

3

いくつかのことを参照してください。あなたがタイトなループである場合を除きのJavaコンパイラは任意のパフォーマンスの向上がある場合、それは知覚できないことを十分に洗練され、この時点で

を想像できる。

この最適化を検討する前に、他のより多くのマクロ最適化(http要求やデータベース要求の削減など)をコード内で調べる必要があります。私はあなたがそれらのことを探し求め、より多くのキーワードを拾うことを保証することができます。

第二に、私はあなたがこれを意味だと思う:

public void setmethod(final int var) 
{ 
    System.out.println(var); 
} 

第三に、私はあなたが本当にできない場合を除き、あなた常にfinalキーワードを使用することをお勧めします。これにより、コードの意図が誰にでも分かりやすくなります。あなたのコードで何が起きるかできないかについて契約書に書いています。

可能な限り変数とフィールドを作成することは、明快さの観点からは理にかなっています。それはパフォーマンスとは関係ありません。

これは、デフォルトで変数が変更可能であるというJavaの設計上の欠陥だと私は常に考えてきました。むしろ、デフォルトでは変数は最終的なものでなければならず、Javaではmutableキーワードが導入されているはずです。

+0

JITはfinalが使われていなくても値が不変であることを知っていると思います。実際にコードによって再割り当てされていないからです。最終的にはコンパイル時の安全性のためだけに役立つでしょう – slipperyseal

+1

私はあなたが正しいと思います。私は確かにわからないし、証拠なしでそれを断言したくなかった。 –

0

あなたのコードスニペットの両方の変数はローカルです。

あなたの質問に限り、finalキーワードは、値が変更されずにプログラムの実行中も一定のままである任意の変数の前に使用できます。変数finalを宣言すると、その値を変更することはできません。 finalの詳細については

ここWhen should one use final for method parameters and local variables?

0

変数の値を変更しないことが確実な場合は、finalを使用することをお勧めします。複雑なメソッドがあると仮定すると、誤って最終変数の値を変更しようとすると、コンパイルエラーが発生します。

+0

それは例外をスローしません、それはちょうどコンパイルされません – slipperyseal

+0

偉大なキャッチ@Sl!私は答えを編集させてください:) –

+1

偉大なcatch @ SlipperySeal!私は答えを編集させてください:) –

関連する問題