黑马程序员技术交流社区
标题:
java instanceof判断问题
[打印本页]
作者:
张甲甲
时间:
2013-5-16 21:29
标题:
java instanceof判断问题
本帖最后由 张甲甲 于 2013-5-24 13:32 编辑
我就是没有弄明白 它是判断什么。
比如 对象 instanceof 方法名。
这是谁判断谁啊,是对象判断 方法名 还是方法名判断 对象,
这个代码运行之后是 3个 true. 不知道为什么
希望帮解答一下....
public class Shout {
String name="Person";
public void Shout(){
System.out.println(name);
}
}
class Student extends Shout{
public void methodB(){
String name="Student";
String School="school";
System.out.print("Child methodB");
}
}
class Sample{
public static void main(String []args){
Shout base=new Student();
System.out.println(base instanceof Student);
System.out.println(base instanceof Shout);
System.out.println(base instanceof Object);
}
}
作者:
Jacky_Chen1990
时间:
2013-5-16 21:56
这个 instance 是判断是否是这个类的对象的 为什么是3个 坐等楼下解答。
作者:
SOAR
时间:
2013-5-16 22:06
1 Shout base=new Student();
2 System.out.println(base instanceof Student);
3 System.out.println(base instanceof Shout);
4 System.out.println(base instanceof Object);
第一句父类引用指向子类对象,运用了多态。就像 Dog dog = new SomeKindOfDog();
第二句判断:base是一种学生吗?很显然,它是
第三局判断:base是一种shout吗?很显然,它已经是一个学生了,而学生又是一种shout,所以base也是一种shout
第三局判断:base是一种对象吗?这是必须的啊,自然界的什么东西不是一种对象呢?
综上所述:它就是会输出三个true,其实程序就是生活,不要把它想的多么抽象,多联系联系生活。
作者:
Neverbelazy
时间:
2013-5-17 01:28
本帖最后由 Neverbelazy 于 2013-5-17 01:39 编辑
0. 其实看到代码的结果, 应该就有了答案, 楼主只是想得到一个可以证实自己想法的出处, instanceof干啥,是JVM说了算的,具体可以看Java文档
1. instanceof 的作用是判断其左边
对象
(
不是引用
)
是否为其右边类的
实例
(
包括子类
)
,返回boolean类型的数据
2. instanceof 可以用作判断 继承关系 和 实现关系 (实例特点),注意区别: person.getClass()== Person.class
3. 所以,参考如下简化了的代码, 就理解了instanceof 的用法就可以了
class Father{}
interface Man{}
class Son extends Father implements Man{}
public class InstanceofTest{
public static void main(String[] args{
Son ofBitch= new Son(); // 前面引用类型改成Father/Man 结果都一样
System.out.println(ofBitch instanceof Son);
System.out.println(ofBitch instanceof Father);
System.out.println(ofBitch instanceof Man);
}
}
复制代码
输出: true true true
参考连接: http://baike.baidu.com/view/1989052.htm
作者:
xiewen
时间:
2013-5-21 01:24
对象 instanceof 方法名 是错的,应该是 对象 instanceof 类名,就是用来判断某个对象是否是某个类的实例。
作者:
Miss小强
时间:
2013-5-21 07:34
instanceof是判断某个对象是否是该类型或者该类型的子类型;instanceof Object一定为true;
如果要想确切性的判断建议使用这种方式:
base.getClass()==Student.class;
这种方式相对优雅。。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2