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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yufeng47 中级黑马   /  2013-4-9 14:30  /  2262 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 yufeng47 于 2013-4-18 19:02 编辑
  1. package cn.itcast.day1;

  2. public class ArrayCLass
  3. {

  4.         /**
  5.          * @param args
  6.          */
  7.         public static void main(String[] args)
  8.         {
  9.                 int [] a1 = {1,2,3};
  10.                 int [] a2 = new int[4];
  11.                 int[][] a3 = new int[2][3];
  12.                 String [] a4 = {"a","b","c"};
  13.                 System.out.println(a1.getClass() == a2.getClass());
  14.                
  15. //1                System.out.println(a1.getClass() == a4.getClass());
  16. //2                System.out.println(a1.getClass() == a3.getClass());
  17.                
  18.                 System.out.println(a1.getClass().equals(a3.getClass()));
  19.                 System.out.println(a1.getClass().equals(a4.getClass()));
  20.         }

  21. }
复制代码
/*        System.out.println(a1.getClass() == a4.getClass());
        System.out.println(a1.getClass() == a3.getClass());               
        System.out.println(a1.getClass().equals(a3.getClass()));
        System.out.println(a1.getClass().equals(a4.getClass()))
  问题:前面两句在张孝祥老师的视屏中就不会报错,为什么在我的机子上就会报错呢?只有改成后面两句才OK。我的机子装的是JDK1.7的。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

9 个回复

倒序浏览
我只知道==和equals()方法的区别 你遇到的问题我没遇到过
我用JDK1.6打开JDK1.7的包就有问题  当时老师也没有解决 大概和JDK的版本有关系
只要代码的语法和逻辑不出问题 这样的边缘错误 不用太纠结

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
你这个问题我也遇到过,我用的Myeclipse是10版本的,里面的JDK是1.7的,张老师用的是JDK1.6的。这个应该是版本的问题吧~

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
http://bbs.itheima.com/thread-39425-1-1.html 这个帖子情况跟你的类似,数组对象数据类型不一样,放在一块不能比较

评分

参与人数 1技术分 +2 收起 理由
陈丽莉 + 2 新人加油~

查看全部评分

回复 使用道具 举报
我一开始也以为是引用类型不对,没法比较,就像boolean和int比较一样编译不会通过
但是我刚才看eclipse源码中equals的实现是  
public boolean equals(Object obj) {
        return (this == obj);
    }
这也是比较的对象引用啊 这不就是和第一二是一样的吗? 同样迷惑了,求解
回复 使用道具 举报
回复 使用道具 举报
若还有问题,继续追问; 没有的话,将帖子分类改成【已解决】哦~

点进自己的帖子,编辑->标题左侧有下拉菜单->改变分类->保存~
回复 使用道具 举报
如下是JDK1.7新增的部分特性,可以研究一下:
1.新增对二进制整数的直接操作。(在开发游戏时,可以利用这一特性直接操作内存中的整数)
2.新增大数值表示时,可用下划线分割,增加大数值的可读性。
3.switch分支,支持String类型
4.JDK1.7增强包装类(Wrapper Class)
5.新增Objects工具类,提供空指针安全的静态方法。
6.新增ThreadLocalRandom类减少多线程资源竞争,保证系统具有更好的线程安全性。
7.新增泛型“菱形”语法,简化泛型编程。
8.异常处理增加多异常捕获。
9.异常处理新增自动关闭资源的try语句。
10.增强throw语句。
11.JDK1.7的Swing组件层次变化。
12.增强的JColorChooser类。
13.新增JLayer装饰组件
14.创建透明、不规则形状窗口。
15.增强的RowSetFactory和RowSet。
16.离线RowSet和离线RowSet的分页查询。
17.Annotation中新增“堆污染”警告和@SafeVarargs
18.JDK1.7的NIO.2
19.新增ForkJoinPool类,充分利用多核CPU资源,分解计算任务。
20.新增AIO实现非阻塞通信。
回复 使用道具 举报
Keith 发表于 2013-4-9 21:11
楼主瞅瞅这
http://bbs.itheima.com/thread-44858-1-1.html

这个贴子回答的好
回复 使用道具 举报
Keith 发表于 2013-4-9 21:06
我一开始也以为是引用类型不对,没法比较,就像boolean和int比较一样编译不会通过
但是我刚才看eclipse源码中 ...

程序中比较的是字节码,两种不同类型的字节码比较的时候编译器会通不过。而this==obj这个就像你说的是比较的引用是不是指向同一个地址。
我题中的解决办法是可以将a1~a4的字节码都用Class类来标记,那么他们就可以参与比较了,这样编译器会认为我们比较的是同一个Class类型的引用
  1. Class aa1 = a1.getClass();
  2. Class aa2 = a2.getClass();
  3. Class aa3 = a3.getClass();
  4. Class aa4 = a4.getClass();
  5. System.out.println(aa1 == aa4);
  6. System.out.println(aa1 == aa3);
  7. System.out.println(aa1 == aa2);
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马