【类型转换】

类型转换

      • 自动类型转换(隐式转换)
      • 算术运算中的自动提升
      • 强制类型转换(显式转换)
      • 类型转换规则表

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

  • 发生在取值范围更小的类型赋值给取值范围更大的类型时。
  • 顺序(从小到大):
    byte→short→int & char→long→float→double
// 从char到int的自动转换charch='A';intcharUnicode=ch;// 'A'的Unicode值是65System.out.println("'A'的Unicode值: "+charUnicode);// 65

算术运算中的自动提升

  • byte & short & char→int→long→float→double
  • 不同类型一起运算时,向更大的类型提升:
inta=10;doubleb=3.5;doublesum=a+b;
  • 方法参数传递也会自动提升:
publicstaticvoidprintNumber(doublex){System.out.println(x);}inta=10;printNumber(a);// 输出10.0

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

  • 将取值范围大的类型转换为取值范围小的类型时,需要强制转换,可能丢失数据。
  • 强制类型转换语法:(目标类型) 值
publicclassTest{publicstaticvoidmain(String[]args){//double→intdoubled=9.99;inti=(int)d;// 直接截断取整数部分,结果为9System.out.println("int d"+i);// 9(精度丢失)//long→bytelongl=130L;byteb=(byte)l;// 130超出byte范围-128~127,溢出System.out.println("byte l"+b);// -126(数据溢出)// 溢出原理解释:// byte范围:-128 ~ 127(共256个数)// 130 - 256 = -126//float→intfloatf=2.6F;inti2=(int)f;System.out.println("int f"+i2);// 2// int→charintunicode=97;charch=(char)unicode;System.out.println("Unicode 97对应的字符: "+ch);// 'a'// 常见的实用转换// int → Stringintnum=100;// 方法一:String.valueOf()Stringstr1=String.valueOf(num);// 方法二:拼接空字符串Stringstr2=num+"";System.out.println("int → String: "+str1);System.out.println("int → String: "+str2);// String → int :Integer.parseInt()Stringstr3="100";intnum3=Integer.parseInt(str3);System.out.println("String → int: "+num3);// String → double:Double.parseDouble()Stringstr4="3.1415926";doublenum4=Double.parseDouble(str4);System.out.println("String → double: "+num4);}}

类型转换规则表

转换方向是否强制转换是否丢失数据
byte→short
byte→char需要可能(负数)
short→int
int→long
int→float是(精度)
long→float是(精度)
float→double
double→int需要
char→int
int→char需要可能(超范围)
boolean和其他类型互相转换不能转换/