Java类型转换详解{大学老师不会讲的知识点}

4 篇文章 0 订阅

什么是自动类型转换,为什么要学习自动类型转换?

类型范围小的变量,可以直接赋值类型范围大的变量      

 

自动类型转换的底层原理

 首先我们看第一个变量a,我们知道byte行变量它占用1一个字节的内存,一个字节的内存就是8位,也就是把12转换成二进制转换成00001100,我们再看int形变量,我们知道int变量它占用4个字节,也就是32位,把12存入变量b占用四个字节,其实只用到了一个字节,因为其他三个字节全部补0,不管是8位还是32位存入的数值都是12;

 这里注意范围小的数据类型可以直接赋值给范围大的数据类型,字符型char 类型可以直接赋值给int类型,因为char的底层就是二进制,而且char只占用两个字节,而int占用四个字节,所以直接可以把char类型的数据赋值给int类型;

来看下案例:

输出结果:

 

 字符型转换为整型:

 

输出结果:

 

 

1.为什么需要进行类型转换:

存在不同类型的变量赋值给其他类型的变量

2.自动类型转换是什么样的?

类型范围小的变量,可以直接赋值类型范围大的变量

表达式的自动类型转换:

在表达式中,小范围的类型的变量会自动转换成当前较大范围的类型再运算。

注意事项:

1.表达式的最终结果类型由表达式中的最高类型决定。

在表达式中,byte,short,char 是直接转换成int类型参与运算的

案例:

 公司面试真题:

 我们可以看到byte num 这里已经报红了,这是因为变量i是字节型,j也是字节型,但是他们在参与表达式运算的时候会自动转换成int类型,所以i+j这个表达式要用int类型的盒子来存储

为什么要把他们当int来看呢?

如果声明两个变量它的范围都符合-128~127 但是当两个变量相加的时候是不是就会超出字节型变量-128~127 比如  byte a = 126  byte b= 127 两个都没有 超出但是相加就超出了128;

 1.表达式的自动类型转换是什么样子的?

小范围的类型会自动转换成大范围的类型运算。

2.表达式的最终结果类型式由谁决定的?

最终类型由表达式的最高类型决定。

3.表达式的哪些类型转换是需要主义的

byte short char 是直接转换成int类型参与运算。

强制类型转换:

 问题:

类型范围大的数据或者变量,不能直接赋值类型范围小的变量,会报错;

强制类型转换:

可以强行将类型范围大的变量,数据赋值给类型范围小的变量。

 

强制类型转换底层原理:

 

我们声明了一个变量a,首先计算机会在内存给变量a分配一个地址,因为a是int整型,所以它的字节是4个字节,他的位数是32位。

 这里声明一个字节型变量b,计算机会在内存里生成一个地址,分配给b,由于b是字节型数据类型,所以他的字节数是一个字节,位数是8,有效位数是7

 

 最终变量byte b会把 int a 强转成byte 类型 

第二种强制转换数据类型情况:

  

 输出结果:

 来看这个例子:

 首先我们声明一个整型变量i 赋值为 1500 这个时候计算机从内存里开辟了一个地址空间:

就是

 然后将i强转后我们会发现j的第一位为1,所以j得出的就是一个负数,至于为什么是36,我会在后期高级程序讲解,所以请关注我~

注意事项:

强制类型转换可能造成数据(丢失)溢出

浮点型强转成整型,直接丢到小数部分,保留整数部分返回

 定义了一个浮点型变量a,赋值99,将a强转为浮点型赋值给b ,然后输出其,发现结果是99,那么就应证了浮点型强转成整型,直接丢掉小数部分,保留整数部分返回。

1.什么是强制类型转换?

可以强行将范围大的变量,数据赋值给类型范围小的变量

2.强制类型转换注意点?

可能数据丢失

小数强制转换成整数是直接截断小数保留整数。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值