java05_JAVA类型转换:
JAVA类型转换:
分为两种:强制类型转换,自动类型转换。
低 .................................................................................高
byte,short,char—>int—>long—>float—>double
强制类型转换:(高到低)
- 常规转换。
int num1 = 127;
byte num2 =(byte)num1;
System.out.println(num1 +" "+num2); //127 127
System.out.println("--------------");
int num3 = 128;
byte num4 =(byte)num3;
System.out.println(num3 +" "+num4); //128 -128
- int类型值的运算得到的值还是int类型 。因为int类型存在范围(大约正负20亿),所以int类型的值之间的运算会导致值的溢出。(这种情况不会出现在比int容量小的类型运算里面。)
int money = 10_0000_0000; //JDK7的新特性,数字之间可以用下划线分割,方便识别。
int years = 20;
int wage = money * years;
System.out.println(wage);
System.out.println("#####################");
//类型1
long wage1 = money * years;
System.out.println(wage1);
System.out.println("#####################");
//类型2
long wage2 = money * (long)years;
System.out.println(wage2);
System.out.println("#####################");
结果:
-1474836480
#####################
-1474836480
#####################
20000000000
#####################
当运算式中有两个类型的变量时,结果自动转换为高容量的变量值。(适用于int级之上)
int类型的容器范围大约在正负20亿之间。
当结果值高于这个范围的时候,出现溢出,导致结果异常。
类型1,值的转换是在计算完后转换的,对计算结果没有影响。
类型2 ,是在计算之前将years 的值转化为long类型,使结果转换为long类型,避免了变量的溢出。
自动类型转换:(低到高)
- 常规转换:
int num9 = 100;
long num10 ;
num10 = num9; //由int转为long,低到高不需要强制转换。
System.out.println(num9 +" "+num10);
结果:
100 100
-
比int容量小的类型运算:
package operator; public class Day2 { public static void main(String[] args) { byte num1 = 127; byte num2 = 127; //结果1 System.out.println(num1+num2); System.out.println("****************"); short num3 = 32767; short num4 = 32767; //结果2 System.out.println(num3+num4); System.out.println("****************"); //结果3 System.out.println(num1+num3); } } 结果: 254 **************** 65534 **************** 32894
byte的范围为(-128—127),结果1转换为int类型的200。
short的范围为(-32768—32767),结果2转换为int类型的65534。
byte类的127+short类的32767,结果3转换为int类型的32894 。
注意点:
1.不能对布尔值进行转换。
2.不能把对象类型转换为不相干的类型。
3.在把高容量转换到底容量的时候,强制转换。
4.转换的时候可能存在内存溢出,或者精度问题!