黑马程序员技术交流社区

标题: 为什么判断不了 [打印本页]

作者: yangyinhui    时间: 2013-4-4 12:09
标题: 为什么判断不了
本帖最后由 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就会报错,为什么啊?
作者: kelline    时间: 2013-4-4 12:26
instanceof 一般是用来判断一个不知具体属于哪个类来实例化的时候进行判断的,没有实例化,是起不到任何作用的

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

你通过定义一个Object类, 这个肯定是没有问题的, 如果你使用instanceof来对demo1进行判断, 也会报错的
作者: 林声荣    时间: 2013-4-4 12:34
类 Object 是类层次结构的根类。每个类都使用 Object 作为超类。所有对象(包括数组)都实现了这个类的方法。
变量 x 本身就是int型了,你为什么还 x instanceof Object 呢?在demo()1中是定义一个Object对象,并将x 的值复制给变量obj吧。
作者: 田光峰    时间: 2013-4-4 13:00

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不是对象所以会报错。
作者: 张洪慊    时间: 2013-4-4 13:12
  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. }
复制代码

作者: 王川    时间: 2013-4-4 14:13

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!
作者: 打工人    时间: 2013-4-4 16:30
若还有问题,继续追问; 没有的话,尽量及时将帖子分类改成【已解决】~
作者: yangyinhui    时间: 2013-4-4 17:36
明白了。




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