基础语法:java的变量类型转换

基础小白努力学习java,希望日后成为编程大牛!

在学习JAVA的强制转换类型之前,我们要先了解有哪些变量的数据类型。

 而今天我们主要学习整数类型浮点类型的类型转化。

1.整数类型变量

2.浮点类型变量 

 当了解了4种整数类型变量和2种浮点类型变量的存储空间的大小及取值范围。接下来就进入今天的变量类型转换:

1.自动类型转换
定义:隐式类型转换,两种数据类型在转换过程中不需要做出任何的声明,由编译器自动完成。
条件:①两种数据类型彼此兼容
          ②目标类型的取值范围大于源类型的取值范围
        (都要满足)

3种可进行交换的情况:①整数类型之间的转换。byte->short、int、long;char->int、long;int->long
                                   ②整数类型转换为float类型:byte、char、short、int->float
                                   ③其他类型转换为double类型:byte、char、short、int、long、float->double

以下举几个简单的例子:

byte转换成int

输出为:

int转换成float

 得到的输出就是这样的:

char转换成double

得到输出:

 由于a是char类型的,所以赋给a的值要转换为ASCLL码,再转换成double类型。

2.强制转换类型
定义:显示类型转换,两种数据类型之间的转换需要进行显式声明。
条件:①两种数据类型彼此不兼容
          ②目标类型取值范围小于源类型,自动转换无法进行
(二者择其一)

先看一个错误例子

 

 程序会报错:类型范围大的数据或变量不能直接赋值给类型范围小的数据或变量。

因此,我们就要学习强制转换的格式:

目标类型 变量=(目标类型)值                 (so easy)

这时,我们来重新修改上面的栗子:

 程序就不会报错。

然而我们有时候会不小心就编写一个超出变量范围的代码

 得到输出:

为什么会出现这种情况呢?那是因为byte类型的范围是[-128,127],但i的输入超过了它本身的范围。1500的二进制为0101 1101 1100,计算机把最高位作为符号位(1-负数 0-正数),所以0101 1101 1100肯定是一个负数。计算机存储的是补码,而负数的补码 = 其对应正数按位取反 + 1。其次,byte是一字节,存储8位二进制,因此高位0101将会被舍去。最后1101 1100按位取反是0010 0011,再把0010 0011进行+1操作,就是0010 0100(36)。所以最终结果是:-36。

数据精度损失:在对变量进行强制类型转化时,如果将取值范围大的数据类型强制转化为取值范围较小的数据类型,极易造成数据精度损失。
精度损失之“四舍五入”:

 “五入”:

“四舍”:

最后一个小tip:在使用+=、-=、×=、/=、%=这些运算符进行赋值时,强制类型的转化会自动完成,程序不需要做任何显示声明。 

举个例子:

 得到结果:

若有不对,请指正,谢谢!

最后,附上我喜欢的句子鼓励每一个热爱编程的人:勤奋,是一种最简单的人生投资。

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值