知识总结
数组类与其它类一样,是Object的子类
@Test
void test() {
int[] intArray = new int[5];
System.out.println(Object.class.isAssignableFrom(int[].class));
System.out.println(Object.class.isInstance(int[].class));
System.out.println(intArray instanceof Object);
}
/*
输出结果
true
true
true
*/
@Test
void test() {
String[] stringArray = new String[5];
System.out.println(Object.class.isAssignableFrom(String[].class));
System.out.println(Object.class.isInstance(String[].class));
System.out.println(stringArray instanceof Object);
}
/*
输出结果
true
true
true
*/
不同的类对应数组类型也是独特的,不存在继承关系
@Test
void test() {
System.out.println(HashMap[].class.isInstance(HashMap.class));
System.out.println(HashMap.class.isInstance(HashMap[].class));
}
/*
输出结果
false
false
*/
数组类之间不存在继承关系
@Test
void test() {
System.out.println(Object[].class.isInstance(String[].class));
System.out.println(HashMap[].class.isInstance(LinkedHashMap[].class));
}
/*
输出结果
false
false
*/
数组类可根据对应的原始类继承关系转型
@Test
void test() {
HashMap[] hashMapArray = new LinkedHashMap[5];
LinkedHashMap[] linkedHashMapArray = (LinkedHashMap[])hashMapArray;
}
数组类根据对应的原始类继承关系向上转型后,不影响运行时的类型
@Test
void test() {
HashMap[] hashMapArray = new LinkedHashMap[5];
System.out.println(hashMapArray.getClass());
}
/*
输出结果
class [Ljava.util.LinkedHashMap;
*/
数组类根据对应的原始类继承关系向上转型后,也无法放入向上转型后对应的原始类的元素
@Test
void test() {
HashMap[] hashMapArray = new LinkedHashMap[5];
hashMapArray[0] = new LinkedHashMap();
// 可通过编译,但会引起运行时异常
hashMapArray[1] = new HashMap();
}
/*
java.lang.ArrayStoreException
*/
可放入子类元素
@Test
void test() {
HashMap[] hashMapArray = new HashMap[5];
hashMapArray[0] = new LinkedHashMap();
hashMapArray[1] = new HashMap();
}
元素的类型不会改变数组的运行时类型
@Test
void test() {
HashMap[] hashMapArray = new HashMap[2];
hashMapArray[0] = new LinkedHashMap();
hashMapArray[1] = new LinkedHashMap();
System.out.println(hashMapArray.getClass());
}
/*
输出结果
class [Ljava.util.HashMap;
*/
PREVIOUSJava锁的条件队列
NEXTJava线程状态转换