2013-09-23 39 views
1

根據文檔,Boolean.valueOf(boolean)方法從不創建對象。如何檢查我是否以編程方式創建新實例?

public class Employee { 
    public static void main(String args[]){ 
      String s1 = "false"; 
      String s2 = "false"; 
      String s3 = "true"; 

      System.out.println(Boolean.valueOf(s1));     
      System.out.println(Boolean.valueOf(s2));     
      System.out.println(Boolean.valueOf(s3));     
    } 
} 

這下面方法轉換的布爾原始值轉換成布爾對象引用

public static Boolean valueOf(boolean b) { 
    return b ? Boolean.TRUE : Boolean.FALSE; 
} 

截至目前多少Boolean Objects創建?我可以檢查一下我的控制檯中是否創建了一個new Object(),或者只有一個Object reference

+0

除非文檔不正確,您爲什麼需要檢查? –

+0

您在進程管理器中看到任何內存使用高峯? –

+1

將布爾值與'=='比較爲Boolean.TRUE和Boolean.FALSE。 –

回答

4

你是不是叫

public static Boolean valueOf(boolean b) { ... } 

要調用

public static Boolean valueOf(String s) { 
    return toBoolean(s) ? TRUE : FALSE; 
} 

其中toBoolean(String)實現如下:

private static boolean toBoolean(String name) { 
    return ((name != null) && name.equalsIgnoreCase("true")); 
} 

得出的結論是:在你的代碼貼出來,不全新創建對象Boolean


Boolean的類定義被首次加載類時創建了兩個Boolean對象:

public static final Boolean TRUE = new Boolean(true); 
public static final Boolean FALSE = new Boolean(false); 
+1

「在發佈的代碼中,根本沒有創建任何新的布爾對象,除**布爾類中定義的布爾對象外」有點混淆。在OP發佈的代碼中,根本不會創建任何新的布爾對象,即使是在布爾類中聲明的那些常量。這些是在布爾的靜態初始化器運行時創建的,它們只是在這裏返回。沒有布爾對象正在創建。 –

+1

@JoshuaTaylor:是的,我的意思是你說的,你的更清楚。在運行時,存在2個'Boolean'對象,但它們是由'Boolean'類創建的,而不是由OPs代碼創建的。 – jlordo

0

沒有創建新的對象,你永遠不會實例化一個新的布爾對象。通過使用Boolean.valueOf()您只需調用一個參考。

0

可以跟蹤使用jvisualvm或任何其他存儲器剖析器/分析器工具實例的數目。

相關問題