2009-06-19 41 views
7

我注意到有一天我可以調用boolean.class,但不是integer.class(或其他原語)。是什麼使布爾如此特別?boolean.class?

注:我在談論boolean.class,而不是Boolean.class(這將有道理)。

Duh:我試過integer.class,而不是int.class。我不覺得愚蠢:\

回答

9

不是integer.class而是int.class。是的你可以。 JRE 6:

public class TestTypeDotClass{ 
    public static void main(String[] args) { 
     System.out.println(boolean.class.getCanonicalName()); 
     System.out.println(int.class.getCanonicalName()); 
     System.out.println(float.class.getCanonicalName()); 
     System.out.println(Boolean.class.getCanonicalName()); 
    } 
} 

輸出

boolean 
int 
float 
java.lang.Boolean 
6

你可以做int.class。它與Integer.TYPE相同。

int.class.isPrimitive(),boolean.class.isPrimitive()void.class.isPrimitive()等將給出值trueInteger.class.isPrimitive(),Boolean.class.isPrimitive()等,將給出值false

3

那麼你可以這樣做int.class以及

System.out.println(int.class); 

該關鍵字的.class用Java 1.1中引入有一個一致的方法來獲取類類型和基本數據類型的類對象。

class: Java Glossary

3

布爾並不特殊。您可以撥打電話

int.class 

例如。所有的原始類型都有這個文字。從Sun的Tutorial

最後,還有一個特殊的文字稱爲類的文字,通過採取類型名稱和附加的「.class」形成的;例如,String.class。這是指表示類型本身的對象(類型爲Class)。

0

也許愚蠢的延續,但爲什麼可以分配給boolean.class類<布爾>,雖然哈希碼有什麼不同?

final Class<Boolean> c = boolean.class;  
System.out.println("c := "+c); 
System.out.println("boolean.class := "+boolean.class); 
System.out.println("Boolean.class := "+Boolean.class); 
System.out.println("boolean.class == Boolean.class := "+(boolean.class == Boolean.class)); 
System.out.println("boolean.class.equals(Boolean.class) := "+boolean.class.equals(Boolean.class)); 
System.out.println("boolean.class.hashCode := "+boolean.class.hashCode()); 
System.out.println("Boolean.class.hashCode := "+Boolean.class.hashCode()); 
+0

因爲`boolean.class`的類型是`Class `。基元不能用作類型參數,因此不存在類「類」。最好不要將問題提交爲答案。這應該是它自己的問題,或者是對其他答案之一的評論。 – gdejohn 2011-01-10 12:39:44

相關問題