Java 数据类型分为两大类:
- 基本数据类型(primitive data type)
- 引用数据类型(reference data type)
整型
类型 | 占用存储空间 | 存储大小 | 表数范围 |
---|---|---|---|
byte | 1字节( 2 8 = 256 2^8=256 28=256) | 8位带符号数 | -128~127 |
short | 2字节( 2 16 = 65536 2^{16}=65536 216=65536) | 16位带符号数 | -32768~32767 |
int | 4字节( 2 32 约 42.9 亿 2^{32}约42.9亿 232约42.9亿) | 32位带符号数 | -约21亿~21亿 |
long | 8字节( 2 64 2^{64} 264) | 64位带符号数 | - 2 63 2^{63} 263~ 2 63 2^{63} 263-1 |
Java 语言整型常量的四种表示形式
二进制数,要求 0b 或 0B 开头,如:0b01110011
十进制整数,如:99, -500, 0
八进制整数,要求以 0 开头,如:015
十六进制数,要求 0x 或 0X 开头,如:0x15
Java 语言的整型常数默认为 int 型,声明 long 型常量可以后加’l’或’L’。
浮点型
类型 | 占用存储空间 | 存储大小 | 表数范围 |
---|---|---|---|
float | 4字节 | 32位,标准IEEE754 | -3.403E38~3.403E38 |
double | 8字节 | 64位,标准IEEE754 | -1.798E308~1.798E308 |
-
float 类型又被称作单精度类型,尾数可以精确到 7 位有效数字。
-
double 表示这种类型的数值精度约是 float 类型的两倍,又被称作双精度类型,绝大部分应用程序都采用 double 类型。
-
Java 浮点类型常量有两种表示形式
(1) 十进制数形式 例: 3.14 314.0 0.314
(2) 科学记数法形式 例:3.14e0 3.14E2 3.14E-1
-
浮点型不精确,不要用于比较浮点数存在舍入误差,数字不能精确表示。浮点数适合普通的科学 和工程计算,精度足够; 但不适合精度要求非常高的商业计算,这时候要使用 BigDecimal 进行 运算和比较。
-
浮点常量默认类型是 double,要改成 float 可以后面加 ‘f’ 或 ‘F’
float类型的数值有一个后缀F或者f ,没有后缀F/f的浮点数值默认为double类型。也 可以在浮点数值后添加后缀D或者d, 以明确其为double类型。
【示例】float 类型常量的写法及变量的声明
float f = 3.14F;//float 类型赋值时需要添加后缀 F/f
double d1= 3.14;
double d2 = 3.14D;
java.math 包下面的两个有用的类:BigInteger 和 BigDecimal,这两个类可以处理任 意长度的数值。BigInteger 实现了任意精度的整数运算。BigDecimal 实现了任意精度的浮 点运算。
字符型
如果有一种统一的字符集,将世界上所有语言字符都纳入其中,每一个字符都给予一个 全球独一无二的编码,那么乱码问题就会消失。于是,全球所有国家和民族使用的所有语言 字符的统一字符集诞生了,这就是 Unicode 字符集。
Unicode 字符集是为了给全世界所有字符一个唯一的编码,“唯一”对应的英文为 Unique,而编码的英文为 code。
Unicode 采用了字符集和编码分开的策略。Unicode 之前,Unicode 诞生之前可以将 字符集和字符编码混为一谈,而在 Unicode 中必须严格区分开。
Unicode 字符集统一采用两个字节表示一个字符,包括英文字母。但是,由于英文占据 互联网信息的绝大部分。真实存储和传输时,会造成极大的浪费;因此,目前主要采用 UTF8 编码来实现具体的存储和传输。
UTF-8 是变长编码,用 1-6 个字节编码 Unicode 字符。西欧字符仍然是 1 个字节,汉字 3 个字节。
字符型在内存中占 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值 |
---|---|---|
\b | 退格(backspace) | \u0008 |
\n | 换行 | \u000a |
\r | 回车 | \u000d |
\t | 制表符(tab) | \u0009 |
\" | 双引号 | \u0022 |
\’ | 单引号 | \u0027 |
\\ | 反斜杠 | \u005c |
以后我们学的 String 类,其实是字符序列(char sequence), 本质是 char 字符组成的数组。
布尔型
- boolean 类型有两个常量值,true 和 false。
- 在内存中占一个字节(boolean数组)或 4个字节(boolean),不可以使用 0 或非 0 的整数替代 true 和 false , 这点和 C 语言不同。
【注意点】
JVM 规范指出 boolean 当做 int 处理,也就是 4 字节,boolean 数组当做 byte 数组处理,这样我 们可以得出 boolean 类型占了单独使用是 4 个字节,在数组中是确定的 1 个字节。
boolean flag = true;//或者 flag=false;
if(flag) {
// true 分支
} else {
// false 分支
}