Java学习笔记——Java类型转换

       Java是一种强类型数据语言,这意味着必须为每一个变量都需要声明一种类型。Java主要有四类八种基本类型,包括4种整型、2种浮点型、1种字符类型和1种char字符类型。

       在使用基本数据类型时,我们注意到每种数据类型是有取值范围的,以整型为例:

类型

字节

取值范围

Byte

1

-128~+127

Short

2

-32768~+32767

Int

4

-2^31~+2^31-1

Long

8

-2^63~+2^63-1

        从上表中我们知道byte数据类型的取值范围时-128~127之间,那么如果使用超出取值范围的值对一个byte变量进行赋值会发生什么: 
       

        byte b=129;

       System.out.println("b的值为"+b);

       事实上,该程序并不能编译执行,jvm会提示以下错误:

       Type mismatch:cannot convert from int to byte

       如果我们想强行将129赋给byte变量,就涉及到数值类型之间的转换。在Java中,有两种类型转换方式:自动类型转换和强制类型转换。

1.数值间的类型转换

       当使用两个不同类型的数值进行二元操作时(如f+i,f是浮点型,i是整型),先要将操作数转换成同一种类型之后,再进行运算。数值类型之间合法的转换遵循下图:

             

 

       6条实心箭头表示无信息丢失的数值类型转换;3条虚线表示可能有信息丢失的类型转换。例如将整数123456789赋值给float类型时会丢失一定的精度。

   int i=123456789;

   float f=i;// f的值位1.23456792E8

2.强制类型转转换

强制类型转换的语法格式是:(targetType)value,强制类型转换是通过截断来实现的:

  1. 当把一个浮点数强制转换成整数时,截断小数部分仅保留整数。
  2. 当把一个超出数据范围的数值付给数据类型时,例如把int类型的129转换成byte型整数时,值会变成-127。

   float f=9.7f;

   int i=(int)f;//i的值为9

   byte b=(byte)385;//b的值为-127

   System.out.println(Integer.toBinaryString(385));//结果为110000001

      int型值为385的整数i的二进制补码为1 1000 0001,总共9位。在强制类型转换时,由于byte类型是一个字节(只能保存8位),所以变量b的二进制补码为1000 0001,对应补码的值为-127。

     此外,在对byte型、short型变量进行计算时会发生自动类型提升,将数值转换为int整形然后进行计算。

byte a=1;

byte b=2;

byte c=1+2;//正确,c=3

byte d=a+b;///报错:cannot convert from int to byte

byte e=(byte)(a+b);//正确 ,e=3

     因此,如果希望将计算结果保存在byte型、short型变量时需对结果进行强制类型转换。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值