java数组如何真正起作用
有人可以解释一下阵列在
Java中是如何工作的.
我对以下代码感到惊讶: Object test = new Object[2][2]; Object test2 = new Object[] { new Object[2],new Object[2] }; Object test3 = new Object[2][]; ((Object[])test3)[0] = new Object[2]; ((Object[])test3)[1] = new Object[2]; System.out.println(test instanceof Object[]); System.out.println(test instanceof Object[][]); System.out.println(test2 instanceof Object[]); System.out.println(test2 instanceof Object[][]); System.out.println(test3 instanceof Object[]); System.out.println(test3 instanceof Object[][]); 只有test2不是Object [] []的实例 运行时有什么区别? 编辑:我看到一些答案. Object[] test4 = (Object [])test; test4[0] = "blaaa"; test4[1] = "toto"; System.out.println(test4); test instanceof Object []返回true,并且在转换时没有在运行时引发异常.根据SCJP的Sierra& amp; Bates,测试IS-A Object [] []但也是一个Object [] 但是当试图用“test4 [0] =”blaaa“;”重新分配一个新值时,我得到一个例外: 所以在运行时看来,test和test2都是IS-A Object [],并且都包含对象数组,但只有一个是IS-A Object [] [] 解决方法
test2指的是两个元素的数组.它的类型只是Object [] – 所以这些元素可以引用任何对象.特别是,您可以写:
// Valid Object[] foo = (Object[]) test2; foo[0] = "hello"; 而那不适用于测试: // Invalid - test isn't just an Object[],it's an Object[][] Object[] foo = (Object[]) test; test[0] = "hello"; 因为测试所引用的数组的元素类型是Object []而不是Object.数组“知道”每个元素应为null或对Object []的引用,因此VM将阻止它存储字符串. 您可以将测试转换为Object [],就像将String []转换为Object []一样 – 这就是所谓的数组协方差,在我看来允许它是错误的.正如我们所见,VM必须在执行时检查商店. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 帮助编写自己的javax.swing.text.Document
- Java异常处理规则
- Java 根据网址查询DNS/IP地址的方法
- java – 如何在Spring @Value注释中正确指定默认值?
- Android简易网络请求工具WebHttpHelper
- 请别再拿“String s = new String("xyz");创建了多
- java – Performance Encog vs Deeplearning4J
- java – onBindViewHolder()中的constructor.getAdapterPos
- SpringBoot实战(六)之使用LDAP验证用户
- Struts2 ActionContext.getSession()法:获取session