Java数据类型转换

155 阅读2分钟

类型转换

  • 由于Java是强类型语言,所以要进行有些运算的时候,需要用到类型转换

  • 转换从低级到高级。

    低  ------------------------------------>  高
    
    byte,short,char—> int —> long—> float —> double 
    
  • 运算中,不同类型的数据先转化为同一类型,然后进行计算

强制类型转换(从高级到底级)

语法((类型)变量名)

int i = 128;
//byte b = i; 在Java编译器中会直接报错
byte b = (byte)i; 

//输出:128
System.out.println(i);
//输出:-128;因为内存溢出
System.out.println(b);


//输出:12;因为精度损失
System.out.println((int)12.3);
//输出:-3;因为精度损失
System.out.println((int)-3.14);

自动类型转换(从低级到高级)

int i = 128;
double b = i;

//输出:128
System.out.println(i);
//输出:128.0
System.out.println(b);

数据类型转换必须满足如下规则:

  • 不能对boolean类型进行类型转换。
  • 不能把对象类型转换成不相关类的对象。
  • 在把容量大的类型转换为容量小的类型时必须使用强制类型转换。
  • 转换过程中可能导致溢出或损失精度
  • 因为 byte 类型是 8 位,最大值为127,所以当 int 强制转换为 byte 类型时,值 128 时候就会导致溢出。
  • 浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入

操作比较大的数的时候,注意溢出问题

//JDK7新特性,数字之间可以用下划线分隔

int money = 10_0000_0000;//10亿
//输出结果:1000000000
System.out.println(money);


int total = 20 * money;
long total2 = 20 * money;
//输出:-1474836480;因为计算的时候溢出了
System.out.println(total);
/*
输出:-1474836480;虽然total2的类型是long型,不会溢出
但是:计算的结果是根据,计算值是根据计算之前的类型 
20和money是int型,所以计算结果也是int型
*/
System.out.println(total2);

long total3 = 20 * ((long)money);
/*
输出:20000000000;
先将money的类型转换为long型
然后计算结果,也是选择以类型级别高的类型为准
*/
System.out.println(total3);