JavaSE学习-数据类型转换

本文深入解析了Java中数据类型转换的原理,包括自动类型转换和强制类型转换的特点及应用,同时探讨了引用数据类型转换的注意事项及实例演示。

数据类型转换

任何一个数据都存在一个默认类型

① 整数默认为int类型
② 浮点数默认为double类型

基本数据类型:

① 自动类型转换
a) 小数据类型转大数据类型
b) 自动类型转换(char和short因为值的范围不同不能自动转换),其它都能完成自动转换
c) 如果值的存储超出了范围就会造成溢出
d) long float double只要两个操作数[数据]中有一个是上面类型的,另一个就会被转换成相应类型,并且结果也是该类型
e) 如果2个操作数(包括byte,short,char,int),都将会转换为int类型,并且结果也是int(自动向上转型)
f) Char类型向更高级的类型转换时,会先转换成对应的Asscii编码,再转换成其他类型
h) Char有两个字节,short也有两个字节,但是它们存储范围不一样,导致byte类型不能自动转换成char类型,char和short也不能自动向更高级转换,所以char和byte、short不能相互自动转换。
i) Java只看类型不看值,若是整数值在byte的存储范围内是可以自动转换的
② 强制类型转换
a) 大数据类型转小数据类型
b) 相同存储空间不同类型的值范围不一样(short和char)必须要强制转换
c) 语法结构为:
[较小]数据类型 变量名 = 较小值[较大的类型];
数据类型 变量名 = (数据类型)值;//值可能是更高的类型
d) 强制类型转换在高转低时会存在精度损失,不同类型的转换可能存在精度损失(实际开发要知道被转换的数据要在一个已知的范围内)

引用数据类型

使用多态,而子类拥有自己的特性时,需要还原它的真实类型就需要数据类型转换
a) 子类类型转父类类型:小转大
Cat cat = new TomCat();
b) 父类类型转子类类型:大转小
TomCat tc =(TomCat)cat;

引用数据类型转换注意事项
class Cat{
	void eat(){}
}
class TomCat extends Cat{
	void say(){}
}
class CoffeeCat extends Cat{
	void drink(){}
}
//测试类
class Test {
	public static void main(String[] args) {
	         Cat cat = new Tomcat();
         CoffeeCat cc = (CoffeeCat)cat;
		cc.drink();
	}
}
  1. 如上代码示例分析;
    a) cat可能是传来的参数:在使用的时候不知道存放的是Tomcat,误以为存的是CoffeeCat类型
    b) 红色代码使用多态:绿色代码引用类型数据转换:cc.drink();
    c) 编译只看类型不看值,如上代码编译都不会有问题!
    d) 但是:运行时反应的是真实类型,绿色代码等于要将TomCat 变成 CoffeCat 显然不行!
  2. 因此引用数据类型转换,最好在转换之前先判断类型在转换
  3. 判断类型的方式
    a) 获得运行时类型 Object 中getClass();方法
    b) 类型判断运算符 instanceof
  4. 判断类型示例
    a) 获得运行时类型 Object 中getClass();方法
class Test {
	public static void main(String[] args) {
		Cat cat = new TomCat();
		String name = cat.getClass().getName();//获取到类型的名字String类型的值
		if(name.equals("CoffeeCat")){//比较是否于CoffeeCat字符串一致
			CoffeeCat cc = (CoffeeCat)cat;
			cc.drink();
		}else{
			System.out.println("友好提示:小哥哥类型错了");
		}
	}
}

b) 类型判断运算符 instanceof

//测试类
class Test {
	public static void main(String[] args) {
		Cat cat = new TomCat();
		if(cat instanceof CoffeeCat){
			CoffeeCat cc = (CoffeeCat)cat;
		}else{
			System.out.println("友情提示:小姐姐你的类型错了");
		}
	}
}

instanceof运算符的运用

Systme.out.println(cat instanceof Cat);//true
Systme.out.println(cat instanceof TomCat);//true
Systme.out.println(cat instanceof Object);//true
Systme.out.println(cat instanceof CoffeeCat);//false
System.out.println(tom instanceof CoffeeCat);//编译报错,不存在继承关系,不兼容,完全相关类型:编译器只看类型不看值
Systme.out.println(cat instanceof String);//编译报错,不存在继承关系,不兼容,完全相关类型:编译器只看类型不看值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值