![](/img/trans.png)
[英]In Java, do operators perform identically on primitive types and primitive wrapper classes?
[英]In Java, do primitive types and arrays have a containing package?
在Java中,原始類型和數組是否包含包含?
可能不是,但只是想確定。
我們來測試一下:
public static void main(final String[] args){
System.out.println(long.class.getPackage());
System.out.println(Object[].class.getPackage());
}
輸出:
空值
空值
不,他們沒有:-)
原始類是沒有包的特殊構造。 為了參考,見的源Long.TYPE
,別名為long.class
:
/**
* The <code>Class</code> instance representing the primitive type
* <code>long</code>.
*
* @since JDK1.1
*/
public static final Class<Long> TYPE =
(Class<Long>) Class.getPrimitiveClass("long");
如您所見,原始類通過包私有和本機機制加載:
static native Class getPrimitiveClass(String name);
並轉換為Class<Long>
(為了啟用自動裝箱,我猜)
BTW:每個包裝類都有一個名為TYPE
的靜態最終字段,映射到相應的基本類,如下面的代碼所示:
private static Class<?> getPrimitiveClass(final Class<?> wrapperClass){
try{
final Field field = wrapperClass.getDeclaredField("TYPE");
final int modifiers = field.getModifiers();
if(Modifier.isPublic(modifiers) && Modifier.isStatic(modifiers)
&& Modifier.isFinal(modifiers)
&& Class.class.equals(field.getType())){
return (Class<?>) field.get(null);
} else{
throw new IllegalArgumentException("This is not a wrapper class: "
+ wrapperClass);
}
} catch(final NoSuchFieldException e){
throw new IllegalArgumentException("This is not a wrapper class:"
+ wrapperClass + ", field TYPE doesn't exists.", e);
} catch(final IllegalAccessException e){
throw new IllegalArgumentException("This is not a wrapper class:"
+ wrapperClass + ", field TYPE can't be accessed.", e);
}
}
public static void main(final String[] args){
final List<Class<?>> wrappers =
Arrays.<Class<?>> asList(
Byte.class, Long.class, Integer.class,
Short.class, Boolean.class, Double.class
// etc.
);
for(final Class<?> clazz : wrappers){
System.out.println("Wrapper type: " + clazz.getName()
+ ", primitive type: "
+ getPrimitiveClass(clazz).getCanonicalName());
}
}
輸出:
包裝類型:java.lang.Byte,原始類型:byte
包裝類型:java.lang.Long,原始類型:long
包裝類型:java.lang.Integer,原始類型:int
包裝類型:java.lang.Short,原始類型:short
包裝類型:java.lang.Boolean,原始類型:boolean
包裝類型:java.lang.Double,原始類型:double
可以通過Array.newInstance(type, length)
創建數組,它在內部調用此方法:
private static native Object newArray(Class componentType, int length)
throws NegativeArraySizeException;
所以,類是由本機代碼創建的特殊構造(並且它們沒有包,否則你可以在某處找到它們)
不,他們沒有,因為他們不是上課。
基元 :基本類型由語言預定義,並由保留關鍵字命名。
array :數組是一個容器對象,它包含固定數量的單個類型的值。
不,但是有一些對象可以在java.lang
包中包裝原始數據類型。
http://download.oracle.com/javase/6/docs/api/java/lang/package-summary.html
不,因為它們是語言結構而不是類本身。
但是,您可以在包裝器中有一個表示基本類型的類,例如:
Integer.TYPE等。 對反射很有用。
但是你會看到那些還沒有包裝,即。
Integer.TYPE.getPackage()
返回null
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.