J'ai fait des expériences avec la réflexion Java et les chaînes de caractères en ligne et je suis arrivé à un 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 les deux premières lignes de la sortie sont-elles
true is true
false is false
Je m'attends à ce qu'ils soient
true is false
false is true
Veuillez noter que le résultat varie selon les plateformes.