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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yangyinhui 中级黑马   /  2013-4-4 12:09  /  1591 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 yangyinhui 于 2013-4-4 17:37 编辑

public static void main(String[] args) {

                demo1();
                demo2();

        }

        private static void demo2() {
                int x = 1;
                Object obj = x;
        }

        private static void demo1() {
                int x = 1;
                System.out.println(x instanceof Object);
        }

}
问题:demo()1可以把x定义为Object,demo()2:x instanceof Object就会报错,为什么啊?

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

7 个回复

倒序浏览
instanceof 一般是用来判断一个不知具体属于哪个类来实例化的时候进行判断的,没有实例化,是起不到任何作用的

你只有实例化过之后 , 才能使用这个来进行判断

你通过定义一个Object类, 这个肯定是没有问题的, 如果你使用instanceof来对demo1进行判断, 也会报错的

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
类 Object 是类层次结构的根类。每个类都使用 Object 作为超类。所有对象(包括数组)都实现了这个类的方法。
变量 x 本身就是int型了,你为什么还 x instanceof Object 呢?在demo()1中是定义一个Object对象,并将x 的值复制给变量obj吧。

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报

public static void main(String[] args) {

                demo1();
                demo2();

        }

        private static void demo2() {
                int x = 1;
                Object obj = x;
        }

        private static void demo1() {
                int x = 1;
                System.out.println(x instanceof Object);
        }

}

demo2中
int x = 1;
Object obj = x;
其实就是一个赋值代码,因为object是一个超类型 所以可以吧int的x赋值给obj
demo1()zhong
int x = 1;
System.out.println(x instanceof Object);
instanceof 他比较的是某一未知对象是否是某一类型
在x instanceof Objec中x不是对象所以会报错。

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
  1. class Demo{

  2. public static void main(String[] args) {

  3.                 demo1();
  4.                 demo2();

  5.         }

  6.         private static void demo2() {
  7.                 int x = 1;
  8.                 Object obj = x;
  9.                                 //Object obj=new Integer(x);
  10.                                 /*
  11.                                上面这句话对x进行自动装箱(或叫类型提升)
  12.                                 相当于 Object obj=new Integer(x);
  13.                                 ->多态
  14.                                 */
  15.         }

  16.         private static void demo1() {
  17.                 int x = 1;
  18.                 //System.out.println(x instanceof Object);
  19.                                 System.out.println((Integer)x instanceof Object);
  20.                                 /*
  21.                                  instance of 判断左边对象是否是右边类的实例
  22.                                  如果你想判断可以提升x
  23.                                  (Integer)x instanceof Object
  24.                                 */
  25.         }

  26. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报

public static void main(String[] args) {

                demo1();
                demo2();

        }

        private static void demo2() {
                int x = 1;
                Object obj = x;//这里是把x自动封装成Integer对象,然后就可以赋值了
        }

        private static void demo1() {
                int x = 1;
                System.out.println(x instanceof Object);//这里的x还是属于int型,是基本类型,所以不属于Object
        }

}

GOOD LUCK!

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
若还有问题,继续追问; 没有的话,尽量及时将帖子分类改成【已解决】~
回复 使用道具 举报
明白了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马