目录
前言
一、基本数据类型的字面值
1、整数字面值
2、比int小的整数可以用范围内的值直接赋值
3、浮点数的字面值
4、字面值后缀LFD
5、进制前缀
二、基本数据类型的类型转换
1、从小到大/隐式转换
2、从大到小/显示转换/强制转换
前言
前面我们了解了什么是数据类型《数据类型之基本数据类型》,也对基本数据类型进行了加固练习《数据类型掌握练习-输入个人信息、计算圆的面积、变量交换》。接下来笔者带大家了解一下基本数据类型的字面值,以及数据类型之间的转换。
一、基本数据类型的字面值
所谓的字面值也可以叫做字面量、直接量、是指再Java中直接写出来的数据。
例如:
int a = 100; //100此时就是int类型的a的字面值
double b = 1.2; //1.2此时就是double类型b的字面值
1、整数字面值
整数的字面值为int类型,也就是说,再Java程序中直接写出来的整数,默认是int类型。
例如:
int a=100;//正确,100是字面值,是int类型,可以赋值给int类型的变量a
System.out.println(2147483647);
//直接打印值2147483647,可以正常打印。因为整数字面值默认是int类型,2147483647也并没有超出int的范围
System.out.println(1230000000000000);//编译错误,超过了默认int类型的表示范围
//The literal 1230000000000000 of type int is out of range
2、比int小的整数可以用范围内的值直接赋值
在不超过范围的前提下,可以使用int字面值为byte、short、char类型赋值,系统会按照对应的类型处理。
例如:
byte b = 127; //底层会先认为200是int类型,但是127也处于byte范围内,所以自动当中byte来处理
short b1 = 32767; //32767处于short的范围,所以也会自动当作short来处理
char b2 = 65535; //同样,自动当作char来处理
//另外,在不超过范围的前提下,int的字面值也是可以直接赋值给long类型的
long b3 = 1000; //我们发现可以正常的去赋值
long b4 = 100000000000; //The literal 100000000000 of type int is out of range
//赋值报错、100000000000默认是int类型,超过了int的范围,所以就不能直接赋值给long了
//那我们就是想赋值,该怎么办呢
long b5 = 100000000000L;
//加上小l或大L,其实就是告诉底层100000000000不能当作int类型来处理啊,他是long类型
3、浮点数的字面值
浮点数的字面值是double类型,也就是说,在Java程序中直接写出来的小数,默认是doublie类型。
例如:
double c = 4.1; //4.1此时就是double类型的c的字面值
float c1=4.1;//4.1为默认浮点类型double类型,占8字节,无法赋值给float
//如果我们想要为float赋值怎么办
float c2=4.1F;
//需要加上小f或大F,来告诉底层,告诉底层3.14不是double类型的,是float类型的
4、字面值后缀LFD
1. 整数类型后跟大写L或小写l -- 表示该字面值是long类型
2. 小数类型后跟大写F或小写f -- 表示该字面值是float类型
3. 小数类型后跟大写D或小写d -- 表示该字面值是double类型
例如:
long d = 20000000000000L;//10000000000000是int类型的字面值,加个L就是long类型了
System.out.println(d);
float d1 = 4.1F;//4.1是double类型的字面值,加个F就是float类型
System.out.println(d1);//4.1
double d2 = 4;//4是int类型,但是会自动转换为double类型,所以输出是4.0
System.out.println(d2);//4.0
double d3 = 4D;//4是int类型,加个D就是double类型
System.out.println(d3);//4.0
5、进制前缀
0x -- 16进制 0x0001
0 -- 8进制 023
0b -- 2进制 0b0101
\u -- char类型,16进制 ,默认值是\u0000
二、基本数据类型的类型转换
float a=104.45;//错误,104.45是默认double类型,左边是float,类型不一致
int b=104L;//104L是long类型,左边是int类型,类型不一致
long c=1045;//对,1045是默认int类型,左边是long类型,类型不一致
double d=1045.45f;//对,1045.45f是float类型,左边是double类型,类型不一致
通过上面的练习,和字面值的介绍,可能大家也发现,为什么有的两边类型不一致,却是对的,而有的两边类型不一致却是错的呢?
当变量类型 和 变量值的类型不匹配时,就需要进行类型的转换操作。而这种转换操作分为两种,这里笔者带大家了解一下。
1、从小到大/隐式转换
从小类型 → 大类型可以自动完成转湖岸,我们不需要动手操作。
byte a = 1;
int b = a; //byte转换为int,小转大
int a2 = 10;
int b2 = 20;
long c = a2+b2; //int转long,小转大
char a3 = '龙';
System.out.println(a3);//返回值为:龙
int b3 = a3;//char转int,小转大
System.out.println(b3);
//返回值我们发现他变成了40857,那是因为他自动将char类型的a3('龙')转换成ASCII码
double e = a3;//char转double,小转大
System.out.println(e);
2、从大到小/显示转换/强制转换
注意:大类型转小类型可能会造成精度丢失的问题!!!(这里先了解即可,下一章我们会讲到)
/*
* x是long类型,左边是int类型,long类型大于int,需要加强制转换符,你自己知道是否会精度溢出
*/
long x=1024L;
int y=(int)x;
/*
* 如果我们将超出int类型的值,强转赋值给int类型,那么就会出现精度溢出的现象
*/
long x1=12345678900000000L;
int y1=(int)x1;
System.out.println(y1);
/*
* 在这里返回结果是我们发现,结果并不是long类型赋予的值而是1566078208。
* 这就是因为超出了int数据类型最大值范围导致的精度溢出
*/
此次笔者就写到这里,有什么疑问或者有什么建议可以评论区告诉我,谢谢大家的支持!!!