文章目录
理解类型转换
不同数据类型的转换
小类型转为大类型
小类型转为大类型是自动提升的;
小类型的变量值赋值给大类型时:
long b = 20; // int字面量常值给long赋值
小类型和大类型进行数学运算时,首先会将小类型提升为大类型后进行数学运算:
long b = a + 1L; // int +long => long + long
大类型转为小类型
大类型转为小类型需要强制类型转换,可能会丢失精度。 (数据溢出或者数据部分丢失)
int a = 10;
long b = 20;
a = b; //编译出错,提示可能损失精度 (将long类型变量赋值给int型可能会导致整型变量放不下b的值)
int a = 0;
double b = 10.5;
a = (int)b;
int和long/double相互赋值
int a = 10;
long b = 20;
a = b; //编译出错,提示可能损失精度
b = a; //通过
int a = 0;
double b = 10.5;
a = b; //编译出错,提示可能损失精度
b = a; //通过
long 表示的范围更大,可以将int赋值给long,但是不能将long赋值给int;
double同理;
int和boolean之间不能赋值
int a = 10;
boolean b =true;
b = a; // 出错,不兼容的类型
a = b;
int字面量常值给byte赋值
byte a =100; //通过
byte b =256; //出错, int转换到byte会有损失
byte表示的数据范围时 - 128 ~ 127,256已经超出范围
使用字面量常量赋值的时候,Java会自动检测校验,判定是否合理。
int和char之间的相互转换
char 2 字节
int 4字节
计算机内部都是0,1 char字符会按照不同的编码规则转为int存储
char a = 'a';
int b = a; //char->int 自动提升,按照Unicode编码将'a'转为int
char c = 'A';
int d = c;
int和String之间的相互转换
int ->String
1.直接使用String对象+
2.使用String的valueOf方法
int num = 10;
String str1 = "" + num; //1
String str2 = String.valueOf(num); //2
String->int
调用int包装类Integer.parseInt()方法 // 字符串中包含非数字时,出错
String str = "123";
int a = Integer.parseInt(str);
String str1 = "1a3e" // 出错
数据类型转换易错点
byte a =120; // 120->int
byte b =130; //在区间内可以直接赋值
byte b =(byte)256;
int a = 120;
byte b = (byte) a;// 大到小 强转
int c = b;// 小到大 自动提升
byte a =10; // 提升为4字节int型
byte b =20;
byte c = a + b;// 出错
byte c = (byte)a + b;
final byte a =10;
final byte b =20;
byte c = a + b;//被fianl修饰的变量数据值不能改,类型也不能提升,存储时仍然是byte型。
混合运算中类型提升
int a = Integer.MAX_VALUE;
Long b = a + 1; //结果为-214...
double a = 2;// int ->double 2->2.0
double b = a + (3/2);//从右往左,3/2 int/int 计算为1;double + int => double + double
不同类型的数据混合运算,范围小的会提升为范围大的;
对于short,byte比四字节小的类型,会先提升为4字节int;在计算。
int a = 10;
long b = 20;
int c = a + b;// 出错 ,提示long->int 会丢失精度 int会提升为long,得到的结果为long型,如果需要int接受结果,需要强转。
long d = a + b;