理解类型转换


理解类型转换

不同数据类型的转换

image-20220516163911295

image-20220516164009464

小类型转为大类型

小类型转为大类型是自动提升的;

小类型的变量值赋值给大类型时:
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会自动检测校验,判定是否合理。

image-20220516170055449

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;

image-20220516172109864

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;

image-20220516171307048

final byte a =10;
final byte b =20;
byte c = a + b;//被fianl修饰的变量数据值不能改,类型也不能提升,存储时仍然是byte型。

混合运算中类型提升

int a = Integer.MAX_VALUE;
Long b = a + 1; //结果为-214...

image-20220516173455746

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;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值