基本数据类型(primitive data type)
Java 是一种强类型语言,每个变量都必须声明其数据类型。
Java 的数据类型可分为两大类:基本数据类型和引用数据类型
Java中定义了3类8种基本数据类型
- 数字型 - byte , short, int, long ,float, double,
- 字符型 - char
- 布尔型 - boolean
注意事项
-
引用数据类型的大小统一为4个字节,记录的是其引用对象的地址
Java 语言的整型常数默认为 int 型,声明 long 型常量可以后加‘ l ’或‘ L ’ 。
是long a = 55555555; //编译成功,在 int 表示的范围内(21 亿内)。 long b = 55555555555;//不加 L 编译错误,已经超过 int 表示的范围。 long b = 55555555555L; //编译成功
浮点型(Floating Point Number)
带小数的数据在 Java 中称为浮点型。浮点型可分为 float 类型和 double 类型。
float 类型又被称作单精度类型,尾数可以精确到 7 位有效数字,在很多情况下,float 类型的精度很难满足需求。而 double 表示这种类型的数值精度约是 float 类型的两倍,又 被称作双精度类型,绝大部分应用程序都采用 double 类型。
float类型的数值有一个后缀F或者f ,没有后缀F/f的浮点数值默认为double类型。也 可以在浮点数值后添加后缀D或者d, 以明确其为double类型。
运行以上两个示例,发现示例2-13的结果是“false”,而示例2-14的输出结果是“d1==d2”。 这是因为由于字长有限,浮点数能够精确表示的数是有限的,因而也是离散的。 浮点数一 般都存在舍入误差,很多数字无法精确表示(例如0.1),其结果只能是接近, 但不等于。二 进制浮点数不能精确的表示0.1、0.01、0.001这样10的负次幂。并不是所有的小数都能可 以精确的用二进制浮点数表示。
BigInteger 和 BigDecimal
java.math 包下面的两个有用的类:BigInteger 和 BigDecimal,这两个类可以处理任 意长度的数值。BigInteger 实现了任意精度的整数运算。BigDecimal 实现了任意精度的浮 点运算。
字符型
字符型在内存中占 2 个字节,在 Java 中使用单引号来表示字符常量。
例如’A’是一 个字符,它与”A”是不同的,”A”表示含有一个字符的字符串。 char 类型用来表示在 Unicode 编码表中的字符。Unicode 编码被设计用来处理各种 语言的文字,它占 2 个字节,可允许有 65536 个字符。
char eChar = 'a'; char cChar ='中';
Unicode 具有从 0 到 65535 之间的编码,他们通常用从’\u0000’到’\uFFFF’之 间的十六进制值来表示(前缀为 u 表示 Unicode)
字符型的十六进制值表示方法
char c = '\u0061';
Java 语言中还允许使用转义字符 ‘\’ 来将其后的字符转变为其它的含义。常用的转 义字符及其含义和 Unicode 值如表 2-6 所示。
char c2 = '\n'; //代表换行符
boolean 型
boolean 类型有两个常量值,true 和 false,在内存中占一个字节或 4 个字节,不可以 使用 0 或非 0 的整数替代 true 和 false ,这点和 C 语言不同。boolean 类型用来判断 逻辑条件,一般用于程序流程控制。
boolean flag ; flag = true; //或者 flag=false;
if(flag) {
// true 分支
} else {
// false 分支
}
在《Java 虚拟机规范》一书中的描述:“虽然定义了 boolean 这种数据类型,但是只对它提供了非 常有限的支持。在 Java 虚拟机中没有任何供 boolean 值专用的字节码指令,Java 语言表达式所操作的 boolean 值,在编译之后都使用 Java 虚拟机中的 int 数据类型来代替,而 boolean 数组将会被编码成 Java 虚拟机的 byte 数组,每个元素 boolean 元素占 8 位”。也就是说 JVM 规范指出 boolean 当做 int 处理, 也就是 4 字节,boolean 数组当做 byte 数组处理,这样我们可以得出 boolean 类型占了单独使用是 4 个 字节,在数组中是确定的 1 个字节。
运算符(operator)
计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java 也提供了一套 丰富的运算符来操作变量。 表
数据类型的转换
八种基本数据类型,除了 boolean 类型之外的七种类型是可以自动转化的。 甚至,我们也可以使用“强制类型转换”将数据类型变成我们所需要的。
自动类型转换
自动类型转换指的是容量小的数据类型可以自动转换为容量大的数据类型。如图 2-6 所 示,黑色的实线表示无数据丢失的自动类型转换,而虚线表示在转换时可能会有精度的损失
强制类型转换
强制类型转换,又被称为造型(cast),用于强制的转换一个数值的类型。在有可能丢 失信息的情况下进行的转换是通过造型来完成的,但可能造成精度降低或溢出。
当将一种类型强制转换成另一种类型,而又超出了目标类型的表数范围,就会被截断成 为一个完全不同的值。