一、数据类型概述
由于变量记录的数据内容大小不同,导致所需的储存单元大小不同。在Java中使用数据类型的概念加以区分。
二、变量的数据类型
八种基本数据类型:
-
数值型:
- 整数类型:
1.byte
2.short
3.int
4.long- 浮点数类型:
5.float
6.double- 字符类型:
7.char
-
布尔型:
8.boolean
五种引用数据类型:
1.类(class)
2.接口(interface)
3.数组
4.枚举(enum)
5.注解(annotation)
三、八种基本数据类型参数一览
| 类型 | 占用内存 | 默认值 |
|---|---|---|
| 整数型(int) | 4字节(32位) | 0 |
| 短整数型(short) | 2字节(16位) | 0 |
| 长整数型(long) | 8字节(64位) | 0 |
| 字节整数型(byte) | 1字节(8位) | 0 |
| 单精度型(float) | 4字节(32位) | 0.0f |
| 双精度型(double) | 8字节(64位) | 0.0d或0.0 |
| 布尔型(boolean) | 2字节(16位) | false |
| 字符型(char) | 1字节(8位) | \'\u0000\' |
提示:
1字节等于8位,1位就是1个二进制数。
byte类型数值范围为-128 ~ 127。
三、定义特殊数据类型的变量
-
单精度浮点数型数据的定义
先来看段代码:
上述代码中,f1,f2均为单精度浮点型数据,区别在于f1赋值为整数10,f2赋值为小数10.5。但是f2的赋值语句却报错。
懂英文的小伙伴应该看出来啦哈,小框框中写的很清楚:
要求的类型是float,而提供的类型是double。
那么为什么会发生类型不匹配的问题呢?
因为在赋值小数时,Java中默认会以double类型存储小数。也就是说,f2也就是10.5已被转为双精度类型(double)而非单精度类型(float)。
要想解决也非常简单,将f2的赋值语句改成这样:
float f2 = 10.5f;
不信你试试,技术小伙伴从来都是童叟无欺好吧 ~
当然,你也可以用数据类型转换的方式理解,虽然这是下一章节的内容,我且在这里先预热一下哈。
double类型数据赋值给float类型变量,等于说是把容量大的的数据类型赋值容量较小的数据类型,执行强制类型转换即可。
float f2 = (float)10.5;
-
长整数型数据的定义
先来看段代码:
先来翻译一下错误提示的小框内的句子:
整数类型数字太大了
嗯??也许此时涉世未深的你一脸懵逼,忍不住来一句加拿大电鳗的250V性感电音:我的很大~,你忍一下,开个玩笑。
原理同上述单精度浮点类似,Java默认以整数型(int)储存数据,同样有两种方式解决报错问题
先来简单的:
long l2 = 2220000000l;//在后面加l或L即可
也可以用强制类型转换的思路解决
long l2 = (long)2220000000;
-
字符类型数据的定义
先来看段代码:
运行结果:
等下,为什么字符类型的变量c可以直接赋值给整数型的变量i?
不卖关子了,直接上
因为字符型数据本质就是一堆整数,所以可以和整数进行互转。
我甚至还可以对c进行自增
得到结果:
请结合这张图一起:
你品,你细品~
来看这段代码:
还是那句话,重要的事情说三遍,第三遍在你的心里说,我提供一下思路:
字符数据类型(char)的容量小于整数数据类型(int)的容量
那么也就意味着,当大的数据类型要赋值小的数据类型时,需要【】【】【】【】【】【】!
五、数据类型的转换
七大基本数据类型间有如下转换关系:
char > byte,short,int > float > long > double
提示:布尔类型数据(boolean)不能转换为任何其他数据类型
注意:byte,short,int 之间不会互相转换,涉及它们三者中任意一个或多个运算时均转为整数型数据(int)
自动类型转换:
容量小的数据类型无须声明转换为容量大的数据类型。
强制类型转换:
容量大的数据类型加上强制转换符转换为容量小的数据类型。
例如:将float类型转换为int类型(float容量大于int),需要强制类型转换。
float f = 10.5f;//默认小数值为double型,别忘了加在小数后加上"f"的声明
int i = (int)f;//强制转换符即用"("和")"把要强转的、容量较小的数据名称包裹起来,放在容量较大数据的标识符前即可
//注意:1.强制转换符必须和赋值运算同时使用。
我们对强转之前的值和强转之后的值执行下面的语句:
System.out.println("强转之前的值="+f+",强转之后的值="+i);
控制台输出结果:
我们会发现强转之后的数据要比强转之前的数据少0.5,这就是所谓强制转换导致精度丢失的情况,使用时需多加注意。
再来看个例子:两短整数类型(short)数据相加
short s1 = 1;
short s2 = 2;
short sum = (s1 + s2);//报错,数据类型不匹配。
怪了,都是short类型数据,怎么就类型不匹配了?
嘿嘿,如果前面仔细看的小伙伴肯定知道怎么回事了,但你能说出原理么?
没仔细看的小伙伴再复习一遍:
注意:byte,short,int 之间不会互相转换,涉及它们三者中任意一个或多个运算时均转为整数型数据(int)
其实是运行过程中Java虚拟机自动将两个短整数类型(short)的数据自动提升为了整数类型(int),目的是为了防止精度丢失。因为字节整数型(byte)和短整数类型(short)的范围都比较小,稍不注意容易超出范围造成数据严重失真。
怎么样,你学会了么?欢迎评论指正!