codeCuisine

一、数据类型概述

由于变量记录的数据内容大小不同,导致所需的储存单元大小不同。在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)的范围都比较小,稍不注意容易超出范围造成数据严重失真。

怎么样,你学会了么?欢迎评论指正!

分类:

技术点:

相关文章:

  • 2021-12-06
  • 2022-01-01
  • 2021-12-24
  • 2021-04-01
  • 2021-09-25
  • 2021-12-10
猜你喜欢
  • 2021-11-30
相关资源
相似解决方案