类型转换

由于java是强类型语言,所以要进行某些计算的时候,需要用到类型转换

低--------------------------------------------------------------->高

byte,short,char---->int---->long---->float---->double

计算中不同类型的数据要先转换为同一类,然后进行计算

强制转换

从高内存转换到低内存时要强制转换:(类型)变量名

自动转换

从低内存转换到好内存是可自动转换

int i=12;
byte b=(byte) i//强制转换
int a=12;
double c=a//自动转换


 

注意!!!

  1. 不能对布尔值进行转换
  2. 不能把对象类型转换为不相干的类型
  3. 把高容量转换到低容量时,要强制转换
  4. 转换时可能存在内存溢出或精度问题
int i=128;
byte b=(byte) i;
System.out.println(i);
System.out.println(b);


结果分别是128、-128,因为byte最多只能到127,内存溢出了

 

System.out.println((int) 23.7);
System.out.println((int) -45.89f);


结果分别是23、-45,这就是精度问题

 

char c='a';
int d=c+1;
System.out.println(d);
System.out.println((char) d);


结果分别是98、b

 

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

(JDK7新特性,数字之间可用下划线分割,下划线并不会被输出)

int money=10_0000_0000;
int yeat=20;
int total=money*yeat;
System.out.println(total);


结果是-1474836480,出现了溢出问题

 

错误操作:

int money=10_0000_0000;
int yeat=20;
long total=money*yeat;
System.out.println(total);


结果还是-1474836480,因为是先用int计算完之后再把结果转换为long

 

正确的操作:

int money1=10_0000_0000;
int year1=20;
long total1=money1*((long)year1);//先把一个数转换为long
System.out.println(total1);