Java的八种基本数据类型

本文详细介绍了Java的四种基本整型(int、short、byte、long)、两种浮点类型(float、double)的特点与使用,包括它们的取值范围、表示方式以及特殊值。此外,还讲解了char类型用于表示Unicode字符及boolean类型的逻辑值。内容涵盖了数值类型的字面量表示、精度问题以及特殊浮点数值,是理解Java数据类型的入门指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

Java有八种基本数据类型,分别是4种整形2种浮点类型1种用于表示Unicode编码的字符单元的字符类型char1种用于表示真值的boolean类型。(String不是基本数据类型)

一、整形

整形用于表示没有小数部分的数值,可以是负数。Java提供了4种整形,它们的具体内容如下:
在这里插入图片描述

一般情况下int类型是最常用的。

在Java种,整形的范围与运行Java代码的机器无关,这就解决了软件从一个平台移植到另一个平台或者同一个平台中不同操作系统之间进行程序移植所带来的问题。Java程序必须保证在所有机器上都能够得到相同的运行结果,因此各种数据类型的取值范围都是固定的。

长整型数值有一个后缀L或l(小写的L,如400000000000l)。十六进制数值有一个前缀0x或0X。八进制有一个前缀0,如010则对那个八进制中的8(八进制表示容易混淆,因此不要常用八进制表示)。

从Java7开始,加上0b或者0B就可以表示二进制数了。

同样从Java7开始,还可以为数字字面量加下划线,如用1_000_000表示一百万(其他进制也可以这样表示,Java编译器会去除这些下划线)。

最后注意,Java没有任何无符号(unsigned)形式的int、long、short或byte类型。也就是说这四种整数类型都是有符号的(可以同时表示负数和正数)。
相关代码如下:

1.	long l = 400000000000l;//长整型整数  
2.	int hexNum = 0xCAFE;//十六进制整数表示,也就是十进制的51966  
3.	int octNum = 010;//八进制整数表示,也就是十进制的8  
4.	int bin = 0b1001;//二进制整数表示,也就是十进制的9  
5.	int num = 1_000_000;//十进制数1000000 

二、浮点类型

浮点类型用于表示有小数部分的数值。Java有两种浮点类型:
在这里插入图片描述
从上表可以看出,double表示的数值精度是float类型的两倍,因此有人称double为双精度数值。在通常情况下,我们都是在程序中使用double类型,因为float类型的精度在很多情况下都是难以满足需求的。

Float类型的数值有一个F或者f后缀,没有F或f后缀的浮点数值默认为double类型,或者在数值后面添加后缀D或者d。

另外,十六进制也可以表示浮点数,具体看相关代码(涉及到计算机组成原理,不展开讲了,可以记住表示形式就可以了):

1.	//可以使用十六进制表示浮点数  
2.	//表示形式为0x尾数*基数*指数  
3.	//如0.125=2^(-3),0.25=2^(-2);  
4.	//对应的十六进制表示分别为0x1.0p-3,0x1.0p-2;  
5.	//比如0x1.0p-3,0x表示十六进制表示,1.0表示尾数(尾数也是采用十六进制表示),基数p=2而不是10,指数-3采用十进制表示  
6.	double hexDou = 0x1.0p-3;//十六进制表示,相当于十进制0.125  
7.	double hexDou2 = 0x1.0p-2;//表示十进制0.25  

所有的浮点数的计算都是遵循IEEE754规范(计算机组成原理相关)。
在浮点数中,有三个特殊的浮点数值:
8. 正无穷大
9. 负无穷大
10. NaN(不是一个数字)

相关代码及其解释:

12.	/** 
13.	 * 浮点数有三个特殊的常量:Double.POSITIVE_INFINITY、Double.NEGATIVE_INFINITY、Double.NaN 
14.	 * 分别表示正无穷,负无穷和判断浮点数是否为一个数值(Float也有对应的三个常量数值) 
15.	 */  
16.	//注意:除数为整数0会报错,除数为浮点数0.0则不会报错  
17.	System.out.println(Double.POSITIVE_INFINITY);//等于1/0.0,正无穷(infinity)  
18.	System.out.println(1/0.0);//输出infinity(正无穷),不会报错  
19.	System.out.println(Double.NEGATIVE_INFINITY);//等于-1/0.0,负无穷(-infinity)  
20.	System.out.println(-1/0.0);//输出-infinity(负无穷),不会报错  
21.	System.out.println(1/0);//注意会报错,除以整数0会报错  
22.	/** 
23.	 * isNaN(x)方法用于判断x是不是一个数值,为true说明不是一个数值,为false表示x是一个数字 
24.	 * 通常不能够直接用x == Double.NaN去判断是否为一个数值,这样结果永远为false 
25.	 * 只有通过isNaN(x)才可以判断x是否为一个数值 
26.	 */  
27.	System.out.println(1/0.0);//无穷大是一个数字,输出为true  
28.	System.out.println(Double.isNaN(0.0/0.0));//无穷小乘以无穷大,结果不是一个有意义的数字,输出false 

注意:浮点数值不适用于无法接受舍入误差的金融计算中。例如,命令System.out.println(2.0-1.1)将打印出0.8999999999999999, 而不是人们想象的0.9。这种舍入误差的主要原因是浮点数值采用二进制系统表示,而在二进制系统中无法精确地表示分数 1/10。这就好像十进制无法精确地表示分数1/3 —样。如果在数值计算中不允许有任何舍入误差, 就应该使用BigDecimal类,

三、char类型

char类型一般用于表示单个字符,其表示的字面量要用单引号括起来。如:

1.	char c = 'A';//表示字符A  
2.	//char c1 = "A";//这是错误的写法,双引号括起来的是字符串类型(String)  
3.	char c2 = '\u0000';//char类型的值也可以表示十六进制值,表示范围从 \u0000 到 \Uffff。表示的字符可以查表  

注意转义序列的转义在解析代码之前就会进行处理,因此在编码过程中,如果没有注意这个特点会出现意想不到的结果:

1.	//转义序列在解析代码之前就进行,需要注意编码和注释中的转义序列  
2.	System.out.println("\u0022+\u0022");  
3.	/** 
4.	 * 实际上,\u0022会在解析之前转换为 ",这会得到也就是一个空串, 
5.	 * 因此输出不是一串字符,而是空串,因为转义在解析代码之前就已经进行了 
6.	 */  
7.	//同时还要注意注释中的代码.注释中的转义字符不是合法的转义也是会报错的  
8.	// Look inside c:\users  这一行注释会报错!!!  

报错信息:
在这里插入图片描述

四、boolean类型

boolean (布尔)类型有两个值:false和true, 用来判定逻辑条件整型值和布尔值之间不能进行相互转换。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值