数据类型概述
Java是一种强类型语言,这就意味着必须为每一个变量声明一种类型。
在Java中,一共有8种基本类型,其中有4种整型、2种浮点类型、1种用于表示Unicade编码的字符单元的字符类型(char)和一种表示真值得boolean类型。
整型
- 基本概念
类型 | 存储需求 | 取值范围 |
---|---|---|
int | 4字节 | -2147483648~2147483647 |
short | 2字节 | -32768~32767 |
long | 8字节 | -9223372036854775808~9223372036854775807 |
byte | 1字节 | -128~127 |
- 注意点
- 在c和c++中,需要针对不同的处理器选择最为高效的整型。但是在Java中,由于必须要保证在所有机器上面都获得同一个成果,所以各种数据结构的取值范围必须固定。因此整型的范围与Java代码的机器无关。
- Java中也没有无符号的int、long、short或byte类型
浮点类型
- 基本概念
类型 | 存储需求 | 取值范围 |
---|---|---|
float | 4字节 | 大约在 ± 3.402 823 47E+38F(有效位数为 6 ~ 7 位) |
double | 8 字节 | 大约 ± 1.797 693 134 862 315 70E+308 (有效位数为 15 位) |
- 注意点
- double 表示这种类型的数值精度是 float 类型的两倍。
- float 类型的数值有一个后缀 F 或 f (例如, 3.14F)。没有后缀 F 的浮点数值(如 3.14 ) 默认为 double 类型。
- 有三个特殊的浮点数值可以用于表示溢出和出错情况
类型 | 表示 | 用法 |
---|---|---|
正无穷大 | Double_POSITIVE_INFINITY | Double.IsPositiveInfinity(4.0 / 0) |
负无穷大 | Double.NEGATIVEJNFINITY | Double.IsPositiveInfinity(-4.0 / 0) |
不是一个数字 | Double.NaN | Double.isNaN(x) |
-
浮点数是如何表示和存储的
- float
- double
- float
-
浮点类型之间如何比较
- 比较值是否相同,
使用BigDecimal来进行比较
BigDecimal b1 = new BigDecimal(Double.toString(v1)); BigDecimal b2 = new BigDecimal(Double.toString(v2)); return b1.compareTo(b2)
- 比较对象是否相同
对象相同和值严格相同是不一样的,原因是java遵循IEEE 754浮点数标准,在这个标准中规定NaN与任何值比较皆不等,如果double_x与double_y的值都NaN,这个时候他们是相同的对象,但double_x == double_y会返回false。因此需要使用一下方法来进行比较:
if(Double.doubleToLongBits(double_x) == Double.doubleToLongBits(double_y))
- 比较值是否相同,
char类型
- 概念
char 类型的字面量值要用单引号括起来。 例如: W 是编码值为 65 所对应的字符常量。它与 “A” 不同,“A” 是包含一个字符 A 的字符串。
除此之外,还有一些特殊的字符表示转义序列。
转移序列 | 名称 | Unicode值 |
---|---|---|
\b | 退格 | \u0008 |
\t | 制表 | u0009 |
\n | 换行 | u000a |
\r | 回车 | \u000d |
\" | 双引号 | \u0022 |
\’ | 单引号 | \u0027 |
\\ | 反斜杠 | \u005c |
- 注意点
- Unicode 转义序列会在解析代码之前得到处理。
例如,"\u0022+\u0022” ,\u0022 会在解析之前转换为 ",这会得到也就是一个空串。
- Unicode 转义序列会在解析代码之前得到处理。
Unicode和char类型
- Unicode是什么
在 Unicode 出现之前, 已经有许多种不同的标准:美国的 ASCII, 西欧语言中的,中国的 GB 18030 和 BIG-5 等。这样就产生了下面两个问题:一个是对于任意给定的代码值, 在不同的编码方案下有可能对应不同的字母;二是采用大字符集的语言其编码长度有可能不同。
例如,有些常用的字符采用单字节编码, 而另一些字符则需要两个或更多个字节。设计 Unicode 编码的目的就是要解决这些问题。 - 何时使用char
在 Java 中,char 类型描述了 UTF-16 编码中的一个代码单兀。
强烈建议不要在程序中使用 char 类型, 除非确实需要处理 UTF-16 代码单元。最好将字符串作为抽象数据类型处理。
boolean类型
boolean (布尔)类型有两个值:false 和 true, 用来判定逻辑条件。整型值和布尔值之间不能进行相互转换。