【发布时间】:2012-01-04 14:53:15
【问题描述】:
我正在试验 Java 反射和内联字符串,并得出了令我感到困惑的结果。
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);
}
}
为什么输出的前两行是
true is true
false is false
我希望他们是
true is false
false is true
请注意输出在不同平台上有所不同。
【问题讨论】:
-
不确定这个字段是什么,但我认为你没有覆盖任何东西,因为函数 (defineTrueFalse()) 是无效的,所以它仍然将 true 打印为 true(并且 false 打印为 false)跨度>
-
似乎您所做的只是通过破坏
String.class内部结构来调用未定义的行为。 -
@Cemre:他没有压倒任何东西。他正在摆弄由文字
"true"和"false"表示的String对象中包含的字段值(value、offset和count)。 -
啊我明白了。很抱歉误解了这个问题。请忽略我的评论。感谢您的回复。
标签: java string reflection boolean