数据类型转换

1 自动类型转换(隐式转换)

  long  num = 100;  其中100默认为int,左右类型不一样,自动转化为long型

特点:代码不需要特殊处理,自动发生转换

规则:数据范围从小的转换成大的

注意:float范围比long大

2 强制类型转换(显式转换)

  int   num  =  100L;  报错,100L范围比int大,不能自动转换

  int   num  =  (int)100L;先将100L强制转换成int型再赋值

注意事项:

  1. 一般不推荐强制转换,可能发生数据溢出或者精度缺失 
  •  整型   数据溢出    int   num = 6000000000L;   60亿超出int范围,会报错,int 21亿左右

           int   num = (int)6000000000L;  60亿强制转化为int型,不报错,但是num数据不是60亿,发生了数据溢出

  • 小数   精度缺失    int   num  = (int)3.5;  结果为3,丢掉小数部分,不是四舍五入

    2.byte ,short , char 可以进行数学运算

  char   A  =  ‘A’;   输出时结果为A

  输出A+1 时,结果为66,所有数据在底层都是一个二进制数字

char类型在运算时,先变成int类型(翻译)再计算

  byte  num1  =  40;

  byte  num2  =  50;

  byte  result  =  num1 + num2;    输出result时出错,num1,num2在运算时先变成int型再运算,所以result应为int型

  byte  result  =   5 + 8;  输出result为13,没报错,右边为两个常量,编译后等于byte  result = 13;叫做编译器的常量优化

       3. 布尔类型不能进行类型转换


 补充:  byte  num = 30;

      输出num 结果为30

     byte  num = 128;

      输出num 报错 ,128超过了byte的范围,30从int型赋给byte型没出错,是因为在数据值没超过byte,short,char范围时,

      javac编译器会隐含地补上一个(byte)(short) (char)强转

      char  zifu = 65;    输出zifu为A