1、隐式转换:把一个取值范围小的数值或者变量,赋值给另一个取值范围大的变量
小的可以给大的
取值范围从小到大:
byte -> short -> int -> long -> float -> double 取值范围小的数据,和取值范围大的数据进行运算,小的会先提升为大的之后,再进行运算 byte short char 三种数据在运算的时候,都会提升为int,然后再进行运算
问题: float占用4个字节, 为什么放在了long(8个字节)的后面
虽然float占用4个字节, 但是 [取值范围] 要比8个字节的long 更大 但是小数的二进制存储形式, 更加节省内存
import java.util.Scanner;
public class Main{
public static void main(String[] args){
int a = 10;
double b = a;
System.out.println(a); // 10
System.out.println(b); // 10.0
System.out.println("--------------------");
long num1 = 123L;
float num2 = num1;
System.out.println(num2);//123.0
byte aa = 10;
byte bb = 20;
int cc = aa + bb;
}
}
2、强制转换
把一个取值范围大的数值或者变量,赋值给另一个取值范围小的变量
不允许直接赋值,需要加入强制转换
格式:目标数据类型 变量名 = (目标数据类型) 被强转的数据;
有可能会损失精度
double a = 12.3;
int b = (int) a;
System.out.println(b);//12
System.out.println("-------------------");
int num1 = 10;
byte num2 = (byte)num1;
System.out.println(num2);//10
System.out.println("-------------------");
int num = 130;
byte result = (byte)num;
System.out.println(result); // -126