在域中已经用了[/public static final Boolean TRUE = new Boolean(true);,我断点跟踪,根本就没有进入Boolean(boolean value)构造器中。
现在的疑问就是:为什么没有创建对象?

解决方案 »

  1.   

    看问题要从全局看
    你的
    public static final Boolean TRUE = new Boolean(true);早就在编译的时候给你弄成了
    public static final Boolean TRUE = Boolean.TURE还执行个毛啊,不信可以发编译你的.class,看是不是你的new Boolean(true)已经不在了编译器就是要能在编译期做的事情全部做掉,减少运行期的任务
      

  2.   

    ---------public class Test {

    public static final Boolean TRUE = new Boolean(true);
    /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    System.out.println(TRUE);
    }}
    Boolean 类
    ----------
      public Boolean(boolean value) {
    this.value = value;  //  lz 在这加个断点
        }
    ------------
      

  3.   

    恩,这是一种编译期的优化策略。在类静态变量中创建Boolean对象,如:public static Boolean TRUE = new Boolean(true); 编译器自动编译成:public static java.lang.Boolean TRUE;因为Boolean中的TRUE是静态变量,不管创建多少次,在内存中都只有一个对象。这就减少了大量创建对象所耗费的运行时间。一般对于Boolean的对象创建,如果不需要新的实例,我们都采用public static Boolean valueOf(boolean b)方法来创建,而不采用new Boolean(boolean b);的构造器,也就是这个原因