学习Java 之类型转换

Java中的类型转换分为 隐式转换和显示转换:

  • 隐式转换也称 自动转换;
  • 显示转换也称 强制转换;
  • 格式:类型名  变量名 = 数据

1.基本类型之间的转换:

1.1隐式转换(Implicit),在jvm运行期间,只要满足条件,就可以完成类型转换的过程。

一般是数据范围比较小的,自动转换为数据范围打的类型(基本类型)。

例如:

byte a = 1;
int b = a;

注意:这里在运行期间,就完成了转换的过程。

1.2显示转换(explicit),也就是手动转换/强制转换,编译器发现类型无法自动转换的情况,就会编译报错,这时候我们确认无误后,就可以进行类型强制转换的过程。

但是这里是存在一定的风险的,在基本类型数据中,这个风险主要是可能会造成数据损失,在应用类型中,将来在代码运行时候,可能会抛出类型转换异常。

例如:

int a = 100;
byte b = a;
//编译报错,因为a是int类型,b是byte
//把32位int数据,赋值给8位的变量b
//把一个范围大的数据,赋给一个范围小的变量
//这时候是不允许的,也无法类型自动转换。

例如:

int a = 100;
byte b = (byte)a;
//但是我们可以做类型强制转换
//对于基本类型,强制转换就是把多余的位给抹去
//所以这时候可能对数据的值,造成影响
				

注意:基本类型中的浮点型数据,如果强行转换成整形,那么之前浮点型数据小数部分,就需要全部抹去。

2.引用类型之间的转换:

2.1隐式转换:

例如:

Student s = new Student();
Object o = s;

特点:字类型的变量,可以自动转化父类类型(隐式)。

//上面俩句可以合成这一句代码,其实就是把中间变量s给去掉了。
Object o = new Student();

特点:Object是父类型,Student是子类型,父类型的引用o,可以接收/指向 一个子类类型的对象,这是因为在运行期间,=号右边的子类类型Student,可以自动转换为=号左边的Object类型

注意:虽然是引用类型之间的类型转换,但是和基本类型之间的转换还是保持一个规则,就是=号右边小范围类型数据,可以自动转为=号左边大范围类型的数据可以隐式转换!

2.2显示转换(类型强制转换,简称强转):

例如:

Object o = new Student();
Student s = (Student)o;

//简化
Student s = (Student)o;

注意:这个代码是编译通过的,因为o声明的类型是Object,而变量s声明的类型是Student,这俩个类型之间是有子父类关系的,所以编译通过。

另外,我们在做类型强转的时候,还可以使用【instanceof】关键字来进行判断(判断是否存在“父子”关系),判断的目的是为了看看这个引用o是否可以转换为Student类型:

Object o = new Student();
if(o instanceof Student){
    Student s = (Student)o;
}

3.类型转换的特点:

  • 在java中,一个变量声明之后,他的类型就确定了,并且这个类型是不会改变的,直到这个变量在内存中释放掉。
int a = 1;
byte b = (byte)a;
//使用a的值的时候,由于=号俩边类型不一致,所以需要转换
//但是这个转换对变量a本身来讲,没有任何影响,在计算机的内存中,只是使用以下a的值,操作完之后的结果,在保存到变量b中,对a本身是没有任何改变和影响的。

byte c = (byte)a;
//所以,接下来如果再使用变量a的时候,那么a的类型依然是int,并且a的值依然是1,除非进行了对a赋值操作,否则这值是不会变量的
//另外,无论对a进行什么操作,变量a的类型一直是int,直到运行结束。


byte c = (byte)a;
//所以,在下面的代码中,任何地方,如果再使用到变量a,这变量a的类型依然是int

//========
Object o = new Student();
Student s = (Student)o;
//这个引用o在声明的时候是Object类型的
//那么在后续的使用中,它将一直是Object类型,不会改变。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值