为什么要进行类型转换?
在编程过程中由于需要,可能会存在需要将一个变量赋值给与之类型不相同的变量的情况

一、自动类型转换

类型范围小的变量,可以直接赋值给类型范围大的变量
例如int类型可以直接赋值给long类型

  1. package edu.dhu.one;
  2. public class Var {
  3. public static void main(String[] args) {
  4. byte a=0b01;
  5. a++;
  6. int b=a;//这里发生了自动类型转换
  7. System.out.println(a);
  8. }
  9. }

image.png
自动类型转换的底层原理:
byte a=00000001
int b=00000000 00000000 00000000 00000001

二、表达式的自动类型转化

在一个表达式中,存在不同类型的变量,小范围类型的变量会自动转换成当前较大范围的类型再运算
image.png

表达式的最终结果的类型由表达式中最高类型决定
在表达式中,byte,short,char是直接转化成int类型进行运算的

三、强制类型转化 (大范围变量转换成小范围变量)

例如:

int a=20;
byte b=a;//此时是大范围向小范围转化,计算机无法进行自动类型转化

强制类型转换:a=(要转换的类型)b;

底层原理:b=a
a: 11111111 11111111 11111111 1111110
b: 11111110
强制类型转换会将大范围的变量的低位赋值给小范围变量

因此:
强制类型转换可能会造成数据丢失;
浮点型转化成整型,直接丢掉小数部分,保留整数部分