一句话解释java类型的强转

很多人对java类型之间的转换,强转,那是傻傻分不清楚。



一、直接关系


具有继承关系的类或接口。其实,对于它们之间的转换不难,需要明白转型的一个规律:


向下转型需要强转


那么什么是向下转型?简单的说,常见的说,就是父类转成子类。父亲在上,儿子在下,这叫做向下转型,如:

Object obj = null;//java中所有类的老大,根

String str = null;

str = (String) obj;obj = str;


那么为什么Object类型转成String需要强制转换?

因为Object是java类型的根类,String 是继承自Object,是Object的子类。


子类继承了父类的所有属性,所以子类转为父类,不需要强转;而父类可能不具备子类的所有属性,因此需要强制转换。


这就好像:苹果肯定是果子,但果子不一定是苹果。如果想让某果子变成苹果,只好强制性称呼某个果子为“苹果”。

这对于具有继承关系的接口和类之间同样适用。如:

		ArrayList<String> aList = null;//ArrayList<E> implement List<E>
		List<String> list = null;//List<E> extends Collection<E> 
		Collection<String> colle = null;
		
		aList = (ArrayList<String>) list;//下←上,强转
		aList = (ArrayList<String>) colle;//下←上,强转
		list = (List<String>) colle;//下←上,强转
		
		list = aList; //父类←子类,上←下
		colle = list;//父接口←子接口,上←下
		colle = aList;//父接口←子类实现,上←下
		



换而言之,类型A具备类型B的所有属性,那么类型A本身就是类型B的一种,是不需要强制转成类型B的。而类型B不一定具备类型A的所有属性,所以转成类型A,需要强制转换。


还是这个例子:苹果肯定是果子,但果子不一定是苹果。如果想让某果子变成苹果,只好强制性称呼某个果子为“苹果”。


二、间接关系


来看看java的基本类型,它们分别是:byte,char,short,int,long,float,double,boolean8个。除了boolean这个“异类”,基本不会遇到什么转换,那么其他类型之间怎么转换?


java的基本类型的封装类,各自之间没有extends继承关系,但实现的接口存在关系,所以不能简单通过父类子类,向上向下来判断。

我的总结就是,对基本类型而言,强转意味着“砍掉”部分内容,谁的精度高,范围广,转成精度低,范围小的就要强转。


(1)整型和浮点型

有点特殊,乍看之下,浮点型是一堆堆的小数,范围比整型大,整型应该在上,浮点型应该在下。然而,实际上,整数本来就是小数的一种:5=5.0啊,小数却不见得等于整数了:5.1=5?,不等滴。所以谁上谁下不是全部以类型的范围作为判断标准的,不适用。谁强转谁,更关键的地方在于其本身的属性。

小数需要砍掉小数点,才变整数,所以说,这是一个强转的过程。而double的小数比float更多,所以,double转成float也需要砍,强转。


double >>float >>int 强转。


(2)字符型和字节型

字符和字节占用的内存空间不同。char 占2,byte占1。char>>byte 强转。也是看谁多,砍谁。


(3)整型之间

long>>int >> short 强转,砍掉。







  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值