Modifier Booléen chaîne de valeurs à l'aide de la réflexion ne fonctionne pas

Je faisais des expériences avec Java réflexion et inline Cordes et est venu avec le résultat que je trouve déroutant.

import java.lang.reflect.Field;

public class HappyDebugging {

    public static void main(String[] args) throws Exception {
        defineTrueFalse();

        System.out.println("true is " + true); //why is it "true is true"?
        System.out.println("false is " + false);
        System.out.println(true);
        System.out.println(false);
        System.out.println("true");
        System.out.println("false");
        System.out.println("true is " + Boolean.valueOf(true));
        System.out.println("false is " + Boolean.valueOf(false));
        System.out.println("true is " + Boolean.valueOf("true"));
        System.out.println("false is " + Boolean.valueOf("false"));
    }

    static void defineTrueFalse() throws Exception{
        Field field = String.class.getDeclaredField("value");
        field.setAccessible(true);
        field.set("true", new char[] {'f', 'a', 'l', 's', 'e'});
        field.set("false", new char[] {'t', 'r', 'u', 'e'});

        field = String.class.getDeclaredField("offset");
        field.setAccessible(true);
        field.setInt("true", 0);
        field.setInt("false", 0);

        field = String.class.getDeclaredField("count");
        field.setAccessible(true);
        field.setInt("true", 5);
        field.setInt("false", 4);
    }
}

Pourquoi deux premières lignes de la sortie sont

true is true
false is false

Je m'attends à être

true is false
false is true

Veuillez noter la sortie varie sur différentes plates-formes.

Pas sûr de ce Champ de chose est, mais je ne pense pas que vous écrasez rien du tout, puisque la fonction (defineTrueFalse()) est nul c'est donc toujours l'impression de vrai (true et false false)
Semble que tout ce que vous faites est en invoquant un comportement non défini par la rupture String.class internes.
RTM docs.oracle.com/javase/7/docs/api/java/lang/reflect/Field.html
Il n'est pas primordial quoi que ce soit. Il est de jongler avec les valeurs de champ (value, offset et count) contenue à l'intérieur de la String objets représentés par les littéraux "true" et "false".
Ah je vois maintenant. Désolé pour la mauvaise interprétation de la question. S'il vous plaît ignorer mon commentaire. Merci pour les réponses.

OriginalL'auteur Vladimir Zhilyaev | 2012-01-04