A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zhouxp3323 黑马帝   /  2012-3-28 19:17  /  1785 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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());
System.out.println(a1.getClass() == a4.getClass());  //编译不通过
System.out.println(a1.getClass() == a3.getClass());  //编译不通过

我电脑怎么最后两句就编译不通过呢,应该可以编译通过的,并返回false。

2 个回复

正序浏览
编译的好处:
1.方法内联
对于java语言来说,通常要调用多个方法完成功能。执行时要经历多次参数传递。采用方法内联的方式把调用的方法指令直接植入到当前方法中。
2.去虚拟化
去虚拟化是指在装载CLASS文件后,进行类层次的分析,如发现类中的方法只提供一个实现类,那么对于调用了此方法的代码,也可进行方法内联,从而提升执行的性能。

3.冗余消除
指在编译时,根据运行时的状况进行代码折叠或消除。

4.标量替换
用简单变量替换复合对象。如用int取代Integer

5.栈上分配
如果某个对象没有逃逸,那么直接在栈上直接创建该对象。

6.同步消除
如果发现同步对象未逃逸,那么也就没有同步的必要了。


我们注意到有一个冗余消除的功能,我想可能是在编译的时候,发现两者为不可比较类型,导致编译不能通过
“=”是运行期间才执行的,所以能通过编译
多多批评
回复 使用道具 举报
int[] a1 = new int[3];
                int[] a2 = new int[4];
                int[][] a3 = new int[2][3];
                String[] a4 = new String[3];
                Class cla1 = a1.getClass();
                Class cla2 = a2.getClass();
                Class cla3 = a3.getClass();
                Class cla4 = a4.getClass();
                System.out.println(a1.getClass() == a2.getClass());
                System.out.println( cla1 == cla4 );  //编译通过
                System.out.println(cla1 == cla3  );  //编译通过
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马