目录

前言

一、基本数据类型的字面值

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

java byte 字面量 java字面值是什么意思_java byte 字面量


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类型

java byte 字面量 java字面值是什么意思_后端_02


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类型的

java byte 字面量 java字面值是什么意思_开发语言_03


 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、从小到大/隐式转换

java byte 字面量 java字面值是什么意思_java_04

 从小类型 → 大类型可以自动完成转湖岸,我们不需要动手操作。

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数据类型最大值范围导致的精度溢出
 */

此次笔者就写到这里,有什么疑问或者有什么建议可以评论区告诉我,谢谢大家的支持!!!