Quelle est la différence entre while (x = false) et while (!x) en Java?

Désolé, je suis nouveau sur Java, de sorte que cette question est peut-être pas clair.

J'ai été récemment traitant avec joignant un try et catch déclaration dans une boucle while, parce que je voulais assurez-vous que l'obtention d'entrée était fermée à partir du reste du programme.

J'ai rencontré un problème où l'aide d'un point d'exclamation (!) en face d'une variable dans le temps (par exemple while (!fait)) au lieu d'utiliser = false (par exemple, tandis que (done = false)) modifie la façon dont mon programme fonctionne.

L'ancien (!fait) des résultats de l'essai et à l'exception des déclarations de course comme prévu.
Le dernier (done = false) n'est pas, il suffit de les ignorer et de passer à la partie suivante du code.

J'étais sous l'impression que les ! avant une variable signifiait la même chose que var = false.

Suis-je trompé?

Voici un exemple:

import java.util.Scanner;

public class TestOne {
    public static void main(String args[]) {
        Scanner input = new Scanner(System.in);
        int num;
        boolean inputDone = false;
        while (!inputDone) {
            try {
                System.out.print("Enter in a number here: ");
                num = input.nextInt();
                inputDone = true;
            }
            catch (Exception e) {
                System.out.println(e);
                System.exit(0);
            }
        }
        System.out.println("Success!");
    }
}

Actuellement, la compilation et l'exécution du programme se fait en douceur: il va me demander pour un certain nombre, en tapant une lettre ou un très long nombre de causes pour imprimer le type d'exception et de sortie. En tapant un nombre normal provoque l'impression de Réussite!

D'autre part, si j'étais à la place de !inputDone avec inputDone = false, il imprime simplement un Succès! quand je lance le programme.

Quelqu'un peut-il expliquer la différence pour moi entre les ! et l' = fausses déclarations dans une boucle while?

x == false est mauvais style, presque aussi mauvais que x == true.
J'aime que la faute dans la question du titre est la raison pour jamais écrit lvalue == false

OriginalL'auteur akbiggs | 2009-09-20