Ⅰ java中instanceof的用法
类型不兼容的情况下不能直接使用instanceof来进行判断,如果这两个类型是基本数据类型可以使用a.getClass().equals(B.class)(其中a是基本数据类型A的一个变量,相当于你这里的s,B是你想要比较的那个数据类型,这里相当于Boolean);如果这两个类型是你自己创建的普通类,则可以让他俩继承一个共同的类,或者实现同一个接口。你这个属于第一种情况,程序如下:
publicclassJudgeType{
publicstaticvoidmain(String[]args){
Strings="true";
Booleanb=true;
System.out.println(s.getClass().equals(Boolean.class));//输出为false
}
}
再举一个第二种的情况,程序如下:
publicclassTest{
publicstaticvoidmain(String[]args){
Personp=newTeacher();//使用多态
booleanb=pinstanceofStudent;
System.out.println(b);//输出为false
}
}
classPerson{
}
classStudentextendsPerson{
}
classTeacherextendsPerson{
}
Ⅱ java关于instance的定义
java中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。
用法:
result = object instanceof class
参数:
Result:布尔类型。
Object:必选项。任意对象表达式。
Class:必选项。任意已定义的对象类。
说明:
如果 object 是 class 的一个实例,则 instanceof 运算符返回 true。如果 object 不是指定类的一个实例,或者 object 是 null,则返回 false。
但是instanceof在Java的编译状态和运行状态是有区别的:
在编译状态中,class可以是object对象的父类,自身类,子类。在这三种情况下Java编译时不会报错。
在运行转态中,class可以是object对象的父类,自身类,不能是子类。在前两种情况下result的结果为true,最后一种为false。但是class为子类时编译不会报错。运行结果为false。
(2)javainstanceof取反扩展阅读
例子:
接口Person
public interface Person {
public void eat();
}
实现类People
public class People implements Person {
private int a=0;
@Override
public void eat() {
System.out.println("======"+a);
}
}
子类xiaoming:
public class xiaoming extends People {
private String name;
@Override
public void eat() {
System.out.println("+++++++++");
}
}
主函数
public static void main(String[] args) {
People p=new People();
xiaoming x=new xiaoming();
System.out.println(p instanceof Person);
System.out.println(p instanceof xiaoming); -----2
System.out.println(x instanceof Person);
System.out.println(x instanceof People);
}
注意:上面2处的代码在编译时不会报错。
运行结果:
true
false
true
true
参考资料:网络:Java
网络:instance
Ⅲ instanceof的用法,要详细的
instanceof属于java关键字之一,instanceof 严格来说是Java中的一个双目运算符,用来测试一个对象是否为一个类的实例,用法为:boolean result = obj instanceof Class
其中 obj 为一个对象,Class 表示一个类或者一个接口,当 obj 为 Class 的对象,或者是其直接或间接子类,或者是其接口的实现类,结果result 都返回 true,否则返回false。
注意:编译器会检查 obj 是否能转换成右边的class类型,如果不能转换则直接报错,如果不能确定类型,则通过编译,具体看运行时定。
(3)javainstanceof取反扩展阅读
obj 必须为引用类型,不能是基本类型。instanceof 运算符只能用作对象的判断。在JavaSE规范中对 instanceof 运算符的规定就是:如果 obj 为 null,那么将返回 false。
知道Java分为两种数据类型,一种是基本数据类型,有八个分别是 byte short int long float double char boolean,一种是引用类型,包括类,接口,数组等等。
而Java中还有一种特殊的 null 类型,该类型没有名字,所以不可能声明为 null 类型的变量或者转换为 null 类型,null 引用是 null 类型表达式唯一可能的值,null 引用也可以转换为任意引用类型。不需要对 null 类型有多深刻的了解,只需要知道 null 是可以成为任意引用类型的特殊符号。
Ⅳ 在JAVA程序中instanceof是什么意思
instanceof是什么东东?
instanceof是Java的一个二元操作符,和==,>,<是同一类东东。由于它是由字母组成的,所以也是Java的保留关键字。它的作用是测试它左边的对象是否是它右边的类的实例,返回boolean类型的数据。举个例子:
String s = "I AM an Object!";
boolean isObject = s instanceof Object;
我们声明了一个String对象引用,指向一个String对象,然后用instancof来测试它所指向的对象是否是Object类的一个实例,显然,这是真的,所以返回true,也就是isObject的值为True。
instanceof有一些用处。比如我们写了一个处理账单的系统,其中有这样三个类:
public class Bill {//省略细节}
public class PhoneBill extends Bill {//省略细节}
public class GasBill extends Bill {//省略细节}
在处理程序里有一个方法,接受一个Bill类型的对象,计算金额。假设两种账单计算方法不同,而传入的Bill对象可能是两种中的任何一种,所以要用instanceof来判断:
public double calculate(Bill bill) {
if (bill instanceof PhoneBill) {
//计算电话账单
}
if (bill instanceof GasBill) {
//计算燃气账单
}
...
}
这样就可以用一个方法处理两种子类。
然而,这种做法通常被认为是没有好好利用面向对象中的多态性。其实上面的功能要求用方法重载完全可以实现,这是面向对象变成应有的做法,避免回到结构化编程模式。只要提供两个名字和返回值都相同,接受参数类型不同的方法就可以了:
public double calculate(PhoneBill bill) {
//计算电话账单
}
public double calculate(GasBill bill) {
//计算燃气账单
}
所以,使用instanceof在绝大多数情况下并不是推荐的做法,应当好好利用多态。
Ⅳ java 编程instanceof 操作符
instanceof前面的引用和后面的类型之间至少要存在可能的继承关系,也就是后面的类型应该和前面的引用类型一致或者是其子类。否则的话,instanceof绝无可能成立,也就是在编译时就可以判断这里结果一定是false了,也就没有必要等到运行时再做这个instanceof运算了。因此,前后类型无关的instanceof运算在Java中是不允许的。
Ⅵ java 的 instanceof 问题
1. java中的instanceof 是一个二元操作符(运算符)运算符,由于是字母组成,
所以是Java的保留关键字,但是和>=,<=,==属同一类,它的作用是用来判断,
instanceof 左边对象是否为instanceof 右边类的实例,返回一个boolean类型值。
还可以用来判断子父类的所属关系。
2.用法:
boolean result = object instanceof class
3.参数:
Result:布尔类型。
Object:必选项。任意对象表达式。
Class:必选项。任意已定义的对象类。
4.扩展
如果 object 是 class 的一个实例,则 instanceof 运算符返回 true。
如果 object 不是指定类的一个实例,或者 object 是 null,则返回 false。
Ⅶ java中 instanceof 运算符的用法
instanceof表示的是实例化,也就是说是否为某个类型。举例:
if("asb" instanceof String){ //执行代码 };
解释:也就回是说abc是否可以转换为字答符串类型,如果可以的话,返回真。
备注:这样做的好处是,先判断了是否可以实例化,而不是直接进行强制类型转换,也就不会出现类型转换失败的情况
Ⅷ Java中的instanceof判断
A instanceof B
A是一个对象(使用new实例的对象)
B是一个类(回不是方法名)
他表示A这个对象是答否是B这个类的实例
代码里base是Shout类型的一个变量,引用了Student的一个实例(Student是继承了Shout的,所以可以这样)
base instanceof Student 判断base这个对象是否是Student这个类的实例,当然是啦,因为base引用的实例就是一个student实例
base instanceof Shout 判断base这个对象是否是Shout这个类的实例,也是,因为Student是继承Shout,根据上面的为true,这个也是true的
最后一个,没什么好想的,Object是所有的类的基类,所以任何实例instanceof Object都为true
Ⅸ JAVA的instanceOf什么时候用啊
你好,
其实这个问题以前也困扰过我。我个人盯御理解的一个应用场合就是,当你拿到一个对象的引用时(例如参数),你可能闭陪需要判断这个引用真正指向的类。所以你需要从该类继承树的最底层开始,使用instanceof操作符判断,第一个结果为true的类即为引用真正指向的类。
例如下面的例子:
class Person{}
class Student extends Person{}
class Postgraate extends Student{}
class Animal{}
public class InstanceofTester {
public static void main(String[] args) {
instanceofTest(new Student());
}
public static void instanceofTest(Person p){
// 判断p的真正类型
if (p instanceof Postgraate){
System.out.println("p是类Postgraate的实例");
} else if(p instanceof Student){
System.out.println("p是类Student的实例");
} else if(p instanceof Person){
System.out.println("p是类Person的实例");
} else if(p instanceof Object) {
System.out.println("p是类Object的实例");
}
/*if(p instanceof Animal){//此错编译错误,所以做注释
System.out.println("p是类Animal的实例");
}*/
}
}
这个程序的输出结轿则蠢果是:p是类Student的实例
Person类所在的继承树是:Object<--Person<--Student<--Postgraate。
这个例子中还加入一个Animal类,它不是在Person类的继承树中,所以不能作为instanceof的右操作数。
你可以跑跑程序,应该就明白什么意思了。
instanceof的应用场合应该还有其它,看看其他朋友有没补充。
希望对你有帮助。