黑马程序员技术交流社区

标题: 关于数组的字节码 [打印本页]

作者: zhaihao    时间: 2014-9-20 20:29
标题: 关于数组的字节码
public class Test {
        public static void main(String[] args) {
                int[] a1=new int[3];
                int[] a2=new int[4];
                int[][] a3=new int[2][3];
                String[] a4=new String[3];
                System.out.println(a1.getClass()== a2.getClass());//true
                System.out.println(a1.getClass()== a4.getClass());//false
                System.out.println(a1.getClass()== a3.getClass());//false

                System.out.println(a1.getClass().getName());//[I

        }

}
为什么会报错????
作者: zhaihao    时间: 2014-9-20 20:30
上图、、、、、、、、、、、、、、

QQ图片20140920202932.jpg (113.61 KB, 下载次数: 16)

QQ图片20140920202932.jpg

作者: 贾浩田    时间: 2014-9-20 21:05
zhaihao 发表于 2014-9-20 20:30
上图、、、、、、、、、、、、、、

同类型、同维数的数组的字节码是同一份,要同时满足这两个条件才能说明两个数组类型的字节码相同
作者: zhaihao    时间: 2014-9-20 22:53
贾浩田 发表于 2014-9-20 21:05
同类型、同维数的数组的字节码是同一份,要同时满足这两个条件才能说明两个数组类型的字节码相同 ...

你说的我知道,我想问的是,我的代码编译的时候就报错了,这是什么情况
作者: 贾浩田    时间: 2014-9-20 23:05
zhaihao 发表于 2014-9-20 22:53
你说的我知道,我想问的是,我的代码编译的时候就报错了,这是什么情况 ...

这个。。。只能说编译器比较强大吧
作者: yueyazhishang    时间: 2014-9-21 09:41
一楼正解,另外关于编译与运行可以参考一下我的回复(非原创):
当你一段代码写完之后一般会经历两个阶段:
1、编译阶段
使用指令:javac
这个阶段,Java编译器(也就是JVM:java虚拟机,后称JVM),首先把你的代码加载完成,然后开始检查语法。如果出现语法错误则提示错误。这个阶段提示的错误我们一般称为编译器错误!
2、运行阶段
使用指令:java
这个阶段,JVM将执行java代码,这个时期出现的错误我们一般称为运行期错误!

编译器错误一般都是语法错误!运行期错误一般都是程序内部(或者程序逻辑)错误!
你说的这个错误就是语法错误!
java规定了在静态方法中不能调用非静态的方法。这个错误已经被整合到了语法错误里面!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2