栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java基础总结(二)基本数据类型详解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java基础总结(二)基本数据类型详解

今天我们来介绍一下Java中的基本数据类型。

首先我们需要知道,Java是一种强类型语言,这就意味着我们必须为每一个变量声明一种数据类型,在Java中,一共有八种基本数据类型和三种引用数据类型,其中基本数据类型又包含4种整形、2种浮点型、一种字符型和一种用于表示真值的boolean类型。下面我们将会着重对基本数据类型进行介绍。

目录

八种基本数据类型

整型

浮点类型

char类型

boolean类型

数据类型转换

强制类型转换


八种基本数据类型

整型

整型用于表示没有小数部分的数值,并且允许为负,Java为我们提供了4种不同的整型来方便我们的使用,具体内容如下

类型存储需求取值范围
byte1字节-128~127
short2字节-2^15 ~ 2^15 - 1
int4字节-2^31 ~ 2^31 - 1
long8字节-2^63 ~ 2^63 - 1

一般来说,int类型最为常用,但是如果要表示整个地球的居住人口或者是时间(从1970年1月1日0时至此时此刻的毫秒数)等大数据的时候,就需要用到long类型,而byte和short类型主要用于特定的一些场合,例如底层处理或者存储空间很宝贵时的大数组,从而更高效率的利用内存空间。不过在运算时不同的数据类型会导致有报错的风险,这个在下文会有详细解释。

细心的你会发现,为什么byte取值范围会是-128~127呢?为什么负数可以比正数多存一个呢?

浮点类型

浮点类型用于表示有小数部分的数值,在Java中有两种浮点类型,具体内容如下:

类型存储需求取值范围
float4字节-3.403 *10^38 ~ 3.403 *10^38
double8字节-1.798 *10^308 ~ 1.798 *10^308

float被称为单精度数值,而double类型的数值精度是float的两倍,所以又被称为双精度数值,在很多情况下,float类型的精度(6~7位有效数字)并不能满足我们计算的需求,所以相对于float来说,double类型更为常用。

需要注意的是,在定义float类型的数据时,需要加上后缀F或f(例如:float a=3.14f)没有加后缀的浮点数值默认为double类型。

有三个特殊的数值会导致浮点数值溢出和报错:

1.正无穷大

2.负无穷大

3.NaN(不是一个数字)

例如:一个正整数除以0等于正无穷大(溢出),而计算0/0则等于NaN(报错)。

char类型

char类型用于表示单个字符。(如今情况有所变化,有些Unicode字符可以用一个char值描述,但另一些则需要两个char值)

char来行的字面量值需要用单引号括起来,例如'A'; 注意,它与"A"不同,后者半酣一个字符A 的字符串。

char值可以参与运算,例如:'a'+1=98;这是根据char值所对应的AscoII码表中的对应值来算的。但字符串并不能参与运算,只能拼接,例如:"你"+"好"="你好"。

boolean类型

boolean(布尔)类型只有两个值:true和flase,用来判定逻辑条件。

注意:整型值和布尔值之间不能进行相互转换。


以上就是Java中的八种基本数据类型了,接下来说一说整型和浮点型计算的时候会产生的一些问题。

数据类型转换

下面看一种情况:

 byte a=1;
 byte b=2;
 byte c=a+b;
 System.out.println(c);

很简单的运算,有人会说,运算出来的结果显而易见,会输出3,但事实并不是这样,我们来看一看:

 java: 不兼容的类型: 从int转换到byte可能会有损失

出乎意料了吧,那这是因为什么呢,其实原因很简单,这是因为Java的常量优化机制,当byte与byte(或者 short char)进行运算的时候,会提升至int类型,也就是说,你计算得到的3其实是int3,而你却给他开辟了一个byte类型的空间,我们已经知道,byte占1个字节,而int占4个字节,你将int类型的数值放进byte类型的存储空间中,就相当于将四个箱子里的东西放进一个箱子里(当然,1字节和4字节存储量的大小并不是简单的一对四,这里只是打个比方,方便大家的理解),这就会导致你不得不丢掉一些东西,这就是所谓的精度损失。所以我们将byte c 换成int c,就没有问题啦。

下面看第二种情况:

 float a=3.14f;
 float b=2.0f;
 long c =a+b;
 System.out.println(c);

这次会是什么结果呢?

有人会说,float占4字节,long占8字节,这次一定没问题了,那么我们来看一看:

 java: 不兼容的类型: 从float转换到long可能会有损失

傻眼了吧,怎么从小转大还是会有精度损失呢?其实如果你仔细观察上面的表格你就会发现,虽然float只占4个字节,但是它的范围其实是要比long还要大的,这是由于他们底层存储和运算方式的不同,所以造成这样的现象。

强制类型转换

那么,在上文的基础上,我们想到,Java常量优化其实是会对存储资源产生浪费的,比如,我用byte明明可以存储的值,可电脑却将它自动转为int类型,白白浪费了这剩下的3个字节的存储空间,如果是一个值还好说,可要是成百上千个值,是不是会产生较大的浪费,那么我们也可以对其进行强制转型,就将它转为byte类型,如下:

 byte c=(byte)(a+b);

我们就将他转为byte类型,这样就解决了内存空间的问题,不过这样做有较大的隐患,有时候会导致巨大的误差。

举个例子,大家看下面这段代码:

 float a=1/2f;
 int b=(int)(100*a);
 System.out.println(b)

我们对100*a的值进行了强制转型,将它转成了int类型,因为100 *(1/2)的值在我们看来等于50,int是完全可以存储的,那么我们看一下结果:

 0
 ​
 进程已结束,退出代码为 0

我们得到了一个0值,这和我们算出来的50差的太多了,这是因为我们将float转成int时,他会自动丢弃小数点后的数,于是1/2的0.5就变成了0,最后的结果就变成了0,所以强制转型有可能会导致精度的损失。

以上就是我总结的一些有关数据类型所要注意的点啦,希望可以对你们有所帮助。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/762626.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号