web-dev-qa-db-fra.com

getBoolean (String str) et valueOf (String str) de la classe Boolean donne un résultat différent.

Je suis surpris de savoir que les méthodes getBoolean() et valueOf() renvoient des résultats différents pour la même chaîne d'entrée.

J'ai essayé de transmettre le "true" aux deux méthodes. Mais getBoolean() me donne une sortie fausse alors que valueOf() me donne une sortie droite qui est vraie. Pourquoi?

39

Le javadoc de getBoolean indique clairement qu'il effectue une recherche dans les propriétés système. La valeur que vous lui transmettez est le nom de la propriété système, et non une chaîne "true" ou "false".

Par exemple, `var b = Boolean.getBoolean (" some.property ");

5
Yoni

Boolean.getBoolean doit être la méthode la moins bien placée en Java. Un des gros WTF.

Pourquoi n'a-t-il pas été placé dans System ou Properties ou quoi que ce soit?

Donc, pour répondre à votre question - oui, c'est une chose très déroutante et vous pouvez simplement cliquer sur la méthode dans votre IDE pour voir le code ou lire le javadoc.

Voici le code source:

 public static boolean getBoolean(String name) {
        boolean result = false;
        try {
            result = toBoolean(System.getProperty(name));
        } catch (IllegalArgumentException e) {
        } catch (NullPointerException e) {
        }
        return result;
    }
1
ACV

J'ai moi aussi trouvé ce problème récemment en utilisant Boolean.getBoolean (). De plus, si vous voulez avoir une vérification de null, vous pouvez utiliser Boolean.parseBoolean qui renverra false en cas de null

0
user1296799
class Boo1
{    
    public static void main(String[] args)
    {    
       System.setProperty("true","true");
       System.setProperty("false","true");

       boolean d=Boolean.getBoolean("true");

       System.out.println(d);   
   }
}
0
G.Balakumaran