当前位置:编程学习 > JAVA >>

instanceof

不是说instanceof前面操作数地编译时类型与后面的类相同或者是后面类的父类么
下面这个编译时类型String 不符合要求怎么也可以用呢

String s = "str";
boolean isObject = s instanceof Object;
--------------------编程问答-------------------- Object是Java中所有对象的基类。而String显然是个对象,所以必然是true。

你试试看用byte、int、float、double? --------------------编程问答-------------------- s是String类的实例。String类是Object类的子类。所以s是Object的实例! --------------------编程问答--------------------
引用 2 楼 yangjunloveyu 的回复:
s是String类的实例。String类是Object类的子类。所以s是Object的实例!
哎呀别逆推啊  我现在想用instanceof来判断
在判断前我想确定是不是可以用instanceof判断
确定依据就是:
引用
instanceof前面操作数的编译时类型与后面的类相同或者是后面类的父类

引用 1 楼 ldh911 的回复:
Object是Java中所有对象的基类。而String显然是个对象,所以必然是true。

你试试看用byte、int、float、double?
用前面的条件判断就是:byte、int、float、double不是Object类、也不是Object类的父类
所以不能使用 instanceof Object

我这个编译类型是String啊 String 不是Object类、也不是Object类的父类
为什么可以这么用呢

希望表达清楚了 求前辈指点

--------------------编程问答-------------------- instanceof检测的是不是某个类或其子类的实例或者实现某个接口。 --------------------编程问答-------------------- --------------------编程问答-------------------- 你理解正好反了。 --------------------编程问答-------------------- 谢谢LS各位
引用 4 楼 huntor 的回复:
instanceof检测的是不是某个类或其子类的实例或者实现某个接口。你理解正好反了。
貌似没有反 
instanceof检测的是不是某个类或其子类的实例或者实现某个接口

instanceof前面操作数地编译时类型与后面的类相同或者是后面类的父类并不冲突,并且如果不满足后者会引起编译错误
下面这段不就是这样的么

public static void main(String[] args) 
{
                
                Object hello = "Hello";
                //Math类是编译类型Object的子类 编译通过
                System.out.println("字符串是否是Math类的实例:" + (hello instanceof Math));
String a = "Hello";
//String类既不是Math类,也不是Math类的父类,所以下面代码编译无法通过
System.out.println("字符串是否是Math类的实例:" + (a instanceof Math));
}

再讲解一下呗 谢谢大侠们 --------------------编程问答-------------------- 是不是Object作为转换目标类是个特例呢 

好吧lz是我马甲 懒得换号了 --------------------编程问答-------------------- instanceof 不是测试它左边的对象是否是它右边的类的实例吗 --------------------编程问答-------------------- 我在http://topic.csdn.net/t/20051208/14/4446224.html找来2个回复作为解释
引用 treeroot 的回复:
A转为B有三种情况
1.不可能
Integer   --> String  
2.一定可以  
String   ---> Object
3.有可能(运行是才知道)
Object   ----> String 
前两者都是编译时就知道,所有我们不会用它
但是编译器好像只阻止了第一种情况,而没有阻止第二种情况,就相当域我们写if(1==1)   也不会出错.
如果在return   语句后还有代码,一般编译不错,但是如果改为
if(ture)   return;   就可以编译通过了.

引用 shine333 的回复:
lz试一下这个,就知道在C/C++/C#/Java(其他非C的不清楚)
反正这些编译器,在编译的时候(也就是平时所讲的编译期)发现代码必然如此,而无需判断的时候,或者代码虽然语易做图确,却必然无法执行或者执行失败的情况,都会编译失败

引用 
结论:lz代码
String s = "str";
boolean isObject = s instanceof Object;
instanceof右边是Object 
所以编译器不会用这条规则检查
"instanceof前面操作数的编译时类型与后面的类相同或者是后面类的父类"
既放过了这条检查 对于这种情况(instanceof右边为Object)我们也不能用这条规则去匹配了

求围观 

错了  求被围观 --------------------编程问答-------------------- a instanceof b表示b是父类,a是子类,a是b的实例
--------------------编程问答-------------------- 子类与父类理解错了......
补充:Java ,  Java SE
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,