1.Java 基本数据类型自动提升、强制转换

1.Java 8种基本数据类型及其占空间大小

类型 空间大小
boolean 8bit/1byte
byte 8bit/1byte
char 16bit /2byte
short 16bit /2byte
float 32bite/4byte
int 32bite/4byte
long 64bite/8byte
double 64bite/8byte

2.基本类型自动转换

自动类型转换:数字表示范围小的数据类型可以自动转换为范围大的数据类型
自动转换
实线转换时不会造成数据丢失,虚线转换可能会出现数据丢失。

例:

byte b = 20;
int n = b;//byte类型可以自动提示到int

类型提升: 是指在多种不同数据类型的表达式中,类型会自动向范围表示大的数值的数据类型提升。

类型提升规则:

  • 如果两个操作数其中有一个是double类型,另一个操作就会转换为double类型。
  • 否则,如果其中一个操作数是float类型,另一个将会转换为float类型。
  • 否则,如果其中一个操作数是long类型,另一个会转换为long类型。
  • 否则,两个操作数都转换为int类型。(隐含意:如果在二元操作中,不存在double,float,long的话,那么byte、short、char类型都会被转化为int类型
  • final修饰的short, char变量相加后不会被自动提升。

例:

byte b1 = 12;
byte b2 = 15;
byte b3 = b1 +b2;//编译不通过,b1+b2会自动提升到int类型,再从int转byte类型会报错。

double d = 1.20;
float f = n + d;//编译不能通过,int+double,int自动提升到double类型,double类型转float报错

final byte b1 = 23;
final byte b2 = 14;
byte byte b3 = b1 + b2;//编译通过,final修饰的变量不再自动提升,byte+byte结果还是byte

3.Java强制类型转换

强制类型转换,可能丢失精度。
格式:目标类型 变量=(目标类型)源类型变量

int a =(int)3.14;

参考:
https://www.cnblogs.com/skipping/p/5449019.html
https://blog.csdn.net/zhaominpro/article/details/79602329
https://www.cnblogs.com/ljdblog/p/6253799.html
https://blog.csdn.net/youanyyou/article/details/80512252#commentsedit

猜你喜欢

转载自blog.csdn.net/xiaojingfirst/article/details/90339039