2017-05-11 18 views
1

Sorry, wenn das eine dumme Frage ist, aber ich bin irgendwie neu in Java-Programmierung.Kontrolle vor dem Setzen eines booleschen Wertes?

Ich habe einen Boolean in einem Thread gespeichert und ich weiß nicht, ob es wahr oder falsch ist.

Ich habe eine Methode setBooleanTrue(), die den booleschen true setzen, aber was ist, wenn der boolean bereits true ist? Es setzt den boolean wieder auf true?

Aus diesem Grund, weshalb ich Sie fragen, ob ich die folgende Kontrolle sollte hinzufügen:

if(!testboolean) 
    testboolean=true; 

Dank.

+0

Was versuchen Sie zu erreichen, möchten Sie den boolean umschalten? –

+2

Nein. Was sollte das Problem sein, wenn 'true' mit' true' überschrieben wird? – Jens

+0

@AmerQarabsa, um eine unnötige Menge zu vermeiden. – Clara

Antwort

1

Wenn Sie in der Höhe der Zeit, indem Sie die bedingte gespeichert interessiert sind, haben einen Blick auf diese:

Unten habe ich beide Versionen des Codes geschrieben, und die erzeugte Java-Bytecode entspricht.

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 

Wie Sie erzeugt die direkte Neuzuordnung des boolean weniger Bytecode sehen.

Zunächst scheint dies die Antwort zu sein. Leider ist es nicht so einfach. Siehe Runtime-Umgebungen tun diese Phantasie-Sache branch prediction. Wenn eine Codezeile kontinuierlich ausgeführt wird, versucht die JVM, das Ergebnis der Bedingung vorherzusagen.

Dies kann eine wirklich gute Sache sein, oder eine wirklich schlechte Sache. Ihre erwarteten Werte von boolean, die Anzahl, wie oft in schneller Folge geprüft werden soll und ob es wahrscheinlich ist, dass ein bestimmter Wert über viele Aufrufe erhalten bleibt, bestimmen, ob Sie die bedingte Anweisung hinzufügen müssen oder nicht.

-1

Wenn Sie einer Variablen einen Wert zuweisen, wird der aktuelle Wert der Variablen nicht ausgewertet, sondern nur die Variable auf den gewünschten Wert gesetzt. Es muss also nicht überprüft werden, ob ein Bool wahr oder falsch ist, bevor es auf "True" gesetzt wird. Wenn es wahr ist, wird es wahr bleiben, wenn es falsch ist, wird es wahr werden.

0

Nun, wenn der Boolean bereits wahr ist. Nichts wird passieren.

+0

Wenn Sie auf "_Es wird den Boolean wieder auf True setzen? _" Der Boolean wird wieder auf 'True' ** gesetzt **, es sei denn, es gibt einige Optimierung in der JVM, aber ich bezweifle es, der gleiche Grund wie der warum Es ist nicht notwendig, den vorherigen Wert zu überprüfen – AxelH

+0

Ich weiß es nicht wirklich, aber prüfen, ob der Boolean bereits wahr ist, wird wahrscheinlich mehr Rechenleistung als wenn Sie nur den Boolean verwenden. –

+1

"_Ich weiß nicht wirklich_" Worüber redest du? Wie auch immer, du antwortest nicht, es wird etwas passieren – AxelH

Verwandte Themen