java上转型之instanceof--避免引用类型强制转化出错

本文深入探讨了Java中Object与String类型的转换过程,并解释了在编译阶段与运行阶段类型的不同表现。通过实例演示了如何使用instanceof关键字进行类型检查,避免潜在的类型转换错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

Object obj="hello";

 上面的obj是什么类型?

object?NO!String?NO?

答案:编译阶段是Object类型,而在运行阶段是String类型。实际上obj是String类型。只不过分为编译和运行两个部分!

那为什么会发生这种情况呢?

我们知道:对于Object obj而言,程序声明了一个Object类型的变量!

               而“hello”是一个String类型的对象

               将Object类型的变量只想String类型的对象,由上篇可以看出这是一个上转型类型!变量由String类型转到Object类型!

由上转型的知识我们知道,在运行期间,对象是直接调用子类String中的方法(但是变量仍然是调用父类中的变量)

 我们必须清楚这种引用类型的强制类型转化是非常危险的

如: Object obj="hello";  Integer in=obj;

这也就引出了如何避免强制引用类型转化的问题:在java中我们用instanceof 来判断一个引用类型是否可以转化到其他类型

instanceof 用于判断某个对象是否是一个类或则子类,实现类,接口的实例,如果是 则返回true,如何不是则返回false

例子:

	public static void main(String[] args) {
		// TODO Auto-generated method stubs
		Object hello="hello";
		//hello运行时就是String类型:true
		System.out.println((hello instanceof String));
		//hello运行时String类型,而String类型是Object类型的子类,子类上转型:true
		System.out.println((hello instanceof Object));
		//String 类型和Math类型风马牛不相及:false
		System.out.println((hello instanceof Math));
		//String 类型也是Comparable类型的子类:true
		System.out.println((hello instanceof Comparable));
		
		//Integet是Object的子类
		Integer inte=new Integer(7);
		System.out.println(inte instanceof Object);
		
		//不能下转型:false
		Object object=new Object();
		System.out.println("object is Integer:"+(object instanceof Integer));
		
		Integer k=10;
		if((k instanceof Object))
		{
			object=k;  //可以执行,因为k就是一个Integer类型,而Integer类型是Object类型的一个子类,符合上转型
		}
		//通Object o="sf";
		Object o=7;
		System.out.println(o instanceof Integer);
		
	}

 

 

 

 

转载于:https://www.cnblogs.com/fjsnail/p/3472183.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值