2017-05-11 6 views
1

申し訳ありませんが、これは愚かな質問ですが、私はJavaプログラミングではまったく新しいです。ブール値を設定する前に制御しますか?

スレッドにbooleanが格納されており、trueかfalseかわかりません。

ブール値trueを設定するメソッドsetBooleanTrue()がありますが、ブール値がすでにtrueの場合はどうなりますか?ブール値を再びtrueに設定しますか?

if(!testboolean) 
    testboolean=true; 

ありがとう:私は、次のコントロールを追加するかどうかを尋ねたい。このため

+0

あなたは何を達成しようとしていますか、ブール値を切り替えたいですか? –

+2

いいえ、 'true'が' true'で上書きされた場合の問題は何ですか? – Jens

+0

@AmerQarabsaは不要なセットを避けるためです。 – Clara

答えて

1

あなたが条件を追加することにより、保存された時間の量に興味があるなら、これを見て:

私はあなたのコードの両方のバージョン、および対応する生成されたJavaバイトコードを書かれている下。

boolean b = true; 
if(!b) 
     b=true; 

0: iconst_1 
1: istore_1 
2: iload_1 
3: ifne 
6: iconst_1 
7: istore_1 
8: return 


boolean b = true; 
b=true; 

0: iconst_1 
1: istore_1 
2: iconst_1 
3: istore_1 
4: return 

あなたが見ることができるように、booleanの直接の再割り当てが少ないバイトコードを生成します。

まず、これは答えのように思えるかもしれません。残念ながら、それは簡単ではありません。ランタイム環境を参照してくださいbranch predictionと呼ばれるこの派手なことを参照してください。コード行が連続して実行されている場合、JVMは条件付きの結果を「予測」しようとします。

これは本当に良いこと、または本当に悪いことかもしれません。 booleanの期待値、迅速に連続してチェックされる回数、および多くの呼び出しによって特定の値のままである可​​能性が高いかどうかによって、条件文を追加するかどうかが決定されます。

-1

変数に値を代入すると、変数の現在の値は評価されず、必要な値に変数が設定されます。したがって、真に設定する前にブールが真か偽かをチェックする必要はありません。真実ならばそれは真実になり、偽なら真実になるでしょう。

0

ブール値が既に真である場合。何も起こりません。

+0

JVMに何らかの最適化がない限り、ブール値は 'true' **に再び設定されますが、私は疑問に思っています。理由と同じ理由前の値を確認する必要はありません – AxelH

+0

私は実際にはわかりませんが、ブール値がすでに真であるかどうかを確認するには、ブール値を設定した場合よりも多くの計算能力が必要になります。 –

+1

「私は本当に知りませんよ」あなたはどういうことを言っていますか?いずれにせよ、あなたは答えが正しくない、何かが起こるでしょう – AxelH

関連する問題