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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© HM朱蛟 高级黑马   /  2013-5-17 05:08  /  2607 人查看  /  22 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 HM朱蛟 于 2013-5-18 07:28 编辑

,请问这段代码在老师的eclips上能通过为什么在我电脑的eclips上通不过?
  1. import java.lang.reflect.*;
  2. public class ArrayRF {
  3. /**
  4.   * @param args
  5.   */
  6. public static void main(String[] args)throws Exception {
  7.   // TODO Auto-generated method stub
  8.   int [] a1 = new int [3];
  9.   int [] a2 = new int [4];
  10.   int [][] a3 = new int [2][3];
  11.   String [] a4 = new String[3];
  12.   
  13.   //对象要得到字节码只能用方法。
  14.   System.out.println(a1.getClass() == a2.getClass());
  15.   System.out.println(a1.getClass() == a4.getClass());//error
  16.   System.out.println(a1.getClass() == a4.getClass());//error
  17. }
  18. }
复制代码

myPC.png (17.05 KB, 下载次数: 0)

我的机器上编译报错

我的机器上编译报错

Teacher.png (61.41 KB, 下载次数: 0)

老师的代码在我机器是也会通不过编译

老师的代码在我机器是也会通不过编译

avi.png (20.67 KB, 下载次数: 0)

这是视频截图 为何老师讲课时通过编译了呢?

这是视频截图 为何老师讲课时通过编译了呢?

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

22 个回复

倒序浏览
顶,我也不知道,我也是这个情况
回复 使用道具 举报
目前正在测试中。把我目前的进度说下。也被卡住了,求滔哥解释下!!
1,
public final Class<?> getClass()返回此 Object 的运行时类。返回的 Class 对象是由所表示类的 static synchronized 方法锁定的对象。 实际结果类型是 Class<? extends |X|>,其中 |X| 表示清除表达式中的静态类型,该表达式调用 getClass。 例如,以下代码片段中不需要强制转换:
Number n = 0;
Class<? extends Number> c = n.getClass();

这段代码完成了一个向上转型。得到了我们想要的结果。着是用的EditPlus写的。
2,再来看看用Myeclipse 写的 ,我并没有向上转型。但是结果还是出来了


3,还是不进行向上转型,在eclipse上进行

可以看到的是,在编译阶段就不让通过,错误报告:Incompatible operand types Class<capture#3-of ? extends int[]> and Class<capture#4-of ? extends int[][]>不兼容的操作数类型
4,在EditPlus上同样不向上转型,同样的错误


编译器6.0,运行环境jdk1.6
eclipse版本:3.4
myeclipse版本:6.5
































评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
不胖的胖子 发表于 2013-5-17 07:52
目前正在测试中。把我目前的进度说下。也被卡住了,求滔哥解释下!!
1,
public final Class getClass()返 ...

这个回答很猛很犀利啊,学习了。
回复 使用道具 举报
上面整段内容其实想说明一个问题:向上转型后,上述工具都可以编译运行通过(eclipse运行图没上);但是,按视频中的代码写,只有myeclipse能同过编译。
我用editplus和eclipse编译阶段就会报错:操作数类型不兼容。希望哪位能帮忙解答下!!
回复 使用道具 举报
不胖的胖子 发表于 2013-5-17 08:01
上面整段内容其实想说明一个问题:向上转型后,上述工具都可以编译运行通过(eclipse运行图没上);但是, ...

我觉得是myeclipse在==操作时有这个自动向上转型,不同ide之间的差异而已,没有什么特别的原因。
就像有些语言,编译器不一样,它处理的结果有些也不一样。
editplus不是ide,没有。  eclipse是ide,但没这个功能,而已。
回复 使用道具 举报
老师的明明是a3,你的a4是字符串类型的数组,而老师的两个都是int类型的进行的比较的。
回复 使用道具 举报
Just_Only 发表于 2013-5-17 08:43
老师的明明是a3,你的a4是字符串类型的数组,而老师的两个都是int类型的进行的比较的。 ...

这个 我表示和你怎么定义变量名称没什么关系
回复 使用道具 举报
黑马伍哲沂 发表于 2013-5-17 08:08
我觉得是myeclipse在==操作时有这个自动向上转型,不同ide之间的差异而已,没有什么特别的原因。
就像有 ...

这个也有可能,我再查查看吧!!感觉着有些牵强
回复 使用道具 举报
我觉得张孝祥老师,有些地方讲的不是很清楚,至少我听得有点糊涂,我也测试下,谢谢楼主的问题!
回复 使用道具 举报
我的建议是在得到字节码文件时加上泛型。因为在预编译的时候如果两者类型不同,是无法通过预编译的,改成如下就可以了。
  1.          public static void main(String[] args)throws Exception {
  2.           // TODO Auto-generated method stub
  3.           int [] a1 = new int [3];
  4.           int [] a2 = new int [4];
  5.           int [][] a3 = new int [2][3];
  6.           String [] a4 = new String[3];
  7.          
  8.           Class<?> ca1 = a1.getClass();
  9.           Class<?> ca4 = a4.getClass();
  10.           //对象要得到字节码只能用方法。
  11.           System.out.println(a1.getClass() == a2.getClass());
  12.           System.out.println(ca1 == ca4);//false
  13.          }
复制代码

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
rosv 中级黑马 2013-5-17 11:31:00
12#
这个是是JDK编译环境的问题,不报错肯定是用JDK1.4或之前的版本,加入泛型后就会报错
Object obj=a4.getClass();
System.out.println(a1.getClass() == obj);这样就不会报错了,==两边要就类型要一样,
a1 a3 a4 分别是class [I   class [[I class   [Ljava.lang.String;
他们不是同一种类型也不能转换
回复 使用道具 举报
不胖的胖子 发表于 2013-5-17 11:16
这个 我表示和你怎么定义变量名称没什么关系

你是不是搞错了 我说的是类型 我说的是定义的类型
回复 使用道具 举报
本帖最后由 Jacky_Chen1990 于 2013-5-17 11:34 编辑

。。。。。。。意见取消。。。。。
回复 使用道具 举报
Just_Only 发表于 2013-5-17 11:31
你是不是搞错了 我说的是类型 我说的是定义的类型

不好意思 看错了 但是讨论的重点不在这里
我们是要做一个横向的比较
按照视频中的比较  会返回 fasle   int[]  与String[] 不会是同一份字节码
但是按视频的代码 在编译阶段就会报错
用Myeclipse是没问题的
还有 我在上面的图文中 给出了运行环境 版本 工具 如果你能仔细看的话
我尝试用1.4版本的编译器 但是结果还是不理想
回复 使用道具 举报
rosv 发表于 2013-5-17 11:31
这个是是JDK编译环境的问题,不报错肯定是用JDK1.4或之前的版本,加入泛型后就会报错
Object obj=a4.getCla ...

不知道兄弟用1.4的编译器的试过没??如果测试了能给给截图吗??这段代码是没什么难理解的,关键是我现阶段不想用ide工具,基本手写,出现这种问题就很纠结了。
回复 使用道具 举报
不胖的胖子 发表于 2013-5-17 11:54
不好意思 看错了 但是讨论的重点不在这里
我们是要做一个横向的比较
按照视频中的比较  会返回 fasle   ...

后面的版本一定会向前兼容,怎么可能说之前的版本不报错,而后来的版本报错。命令行下的编译运行才是最原汁原味的,不管出于什么原因。都会和myeclipse这个特定ide相关。
回复 使用道具 举报
不胖的胖子 发表于 2013-5-17 11:59
不知道兄弟用1.4的编译器的试过没??如果测试了能给给截图吗??这段代码是没什么难理解的,关键是我现 ...

其实我觉得你已经找到根本原因了,上面的回复也非常给力。早上我也在看这个问题,看你的解释就都明白了。
回复 使用道具 举报
rosv 中级黑马 2013-5-17 15:21:10
19#
不胖的胖子 发表于 2013-5-17 11:59
不知道兄弟用1.4的编译器的试过没??如果测试了能给给截图吗??这段代码是没什么难理解的,关键是我现 ...

编译时指定编译版本 ,虽有警告,但没有报错,成功编译成.class文件,详情看截图。。。

jieguo.jpg (107.52 KB, 下载次数: 0)

运行结果

运行结果

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
E:\20130517165353.png
运行结果完全没有问题!

QQ截图20130517165353.png (118.64 KB, 下载次数: 0)

QQ截图20130517165353.png

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马