数据类型就是一组性质相同的值的集合,以及定义在这些值上的一组操作的总称。例如:整型就是由所有整数(-∞, +∞)组成的集合,并且在该集合上可以进行加、减、乘、除操作。
根据对数据类型的使用约束程度来划分,高级编程语言分为:强类型语言和弱类型语言
强类型语言必须实现声明变量的类型,如整型、字符型、浮点型,然后才可以使用,并且该变量将只能存放声明时指定的类型。同样,强类型语言中的每一个表达式也都有确定的类型。如下Java代码:
int age = 22; // 声明 int 类型变量 age,同时赋值为 22 int oldAge = age + 40; // 将 age + 40 表达式的赋值给新声明的 oldAge 变量
同时,在强类型语言中还对数据类型可以进行哪些操作进行了限制,例如:不能对 int 类型进行逻辑运算。数据类型还可以用来确定运算操作符的具体含义。例如:+ 号,在对数字类型是就是加的含义,用在字符串上时是连接字符的含义。代码如下:
int age = 20 + 2; // age = 22 进行算术加法操作 String message = "hello" + " world"; // message = "hello world" 进行字符串连接
弱类型语言对数据类型不作严格区分,声明一个变量时可以不指定数据类型,甚至可以不经声明就可以直接使用一个变量,变量的数据类型是随着变量存储的值的类型变化而变化。常见弱类型语言有 JavaScript、VB 和 Perl 等。示例代码:
<script type="text/javascript"> age = 22; console.log(age); </script>
若语言类型虽然编写简单,但执行效率相比强语言要底,不同类型数值间的转换开销大。并且容易出现语法检查通过,但是运行结果不正常的情况,对调试有一定的难度。
Java 语言数据类型分为两大类:基本数据类型和引用数据类型,基本数据类型参考“数据类型”。
基本数据类型(Primitive Type)包括数值类型、字符型和布尔类型。在 Java 语言规范中,也将字符型划做数值类型的一种。基本类型的数据只能保存单一的值,因此也被称为原始类型或简单类型。Java 为了确保程序的可移植性,所有基础数据类型都是定长的,例如:int 类型数据占用的存储空间永远是 32 位,与程序运行的操作系统、处理器结构无关。
整型数据类型用于保存整数信息,Java 提供了四种不同的整数类型,它们占用的存储空间和表示范围不相同。如下表:
类型 | 占用空间 | 最小值 | 最大值 |
byte | 1字节 | -128 | 127 |
short | 2字节 | -32768 | 32767 |
int(默认) | 4字节 | -2,147,483,648 | 2,147,483,647 |
long | 8字节 | -9,223,372,036,854,775,808 | 9,223,372,036,854,775,807 |
注意:在 Java 语言中直接给出的整数常量默认是 int 类型,如果你要指定 long 类型的常量需要在数字后添加小写 l(不建议使用,因为它和数字 1 肉眼不容易区分) 或大写 L。
Java 中整型常量有三种表现形式:
十进制:该进制是最为常用,如:300、128、-254、0 等等。
十六进制:该类型常量由 0x 或 0X 开头,后跟十六进制码(0~9、a~f、A~F),例如:0x25、0X5BC5 等等。
八进制:该类型常量由 0 开头,后跟八进制码(0~7),如:042、018 等等
示例:
public class TestInt { public static void main(String[] args) { int a = 100; int b = 200; long c = 120; System.out.println(a); System.out.println(b); System.out.println(c); System.out.println(a + b); } }
运行结果:
100 200 120 300
Java 语言中浮点型包括 float 和 double 两种,分别用于保存单精度和双精度的浮点数。它们占用的存储空间和表示范围如下表:
类型 | 占用空间 | 最小值 | 最大值 | 有效位数 |
float | 4字节 | -3.403e38 | 3.403e38 | 6~7位 |
double | 8字节 | -1.798e308 | 1.798e308 | 15位 |
Java 语言中浮点型常量也有两种表示方式:
十进制形式:表示浮点数时必须包含小数点,如:3.5、0.11、.12 等等。也可以使用科学计数法表示十进制的浮点数,如:4.334e2、1.24e2、4.5e-3 等等,其中 E 或 e 后跟的是十进制指数。
十六进制形式:Java 从 JDK 1.5 开始,也可以使用十六进制形式表示浮点数了,但是只能采用科学计数法形式进行表示,格式如下:
<0x|0X><十六进制尾数><p|P><以2为底的指数>
例如:0x1.2p3,转换成十进制的计算方法为:0x1.2p3 = (1*160+2*16-1)*23 = 9.0
注意:
(1)在浮点数的十六进制表示法中,使用 p 或者 P 指定指数,而不是使用 e 或者 E。
(2)只要是使用科学计数法表示就一定是浮点数,如:3.14E2
和整数类似,直接给出浮点型常量,Java 默认为 double 类型。当然,也可以在浮点数后面添加 D 或者 d 字母来标明为 double 类型常量,添加 F 或者 f 字母来表明为 float 类型常量。
在整型中,整数除以 0 时会抛出除数为 0 错误。但在浮点型却不会,Java 语言定义了三个特殊的浮点值来表示浮点数除以 0 运算时的各种出错情况:
Infinity:整无穷大,正数除零时的结果
-Infinity:负无穷大,负数除零时的结果
NaN:Not a Number 0.0/0 或负数开平方根时的结果
示例:
public class TestFloat { public static void main(String[] args) { double d1 = 1024.3; double d2 = 1.024e3; double d3 = 0x1.2P3; double d4 = 0x1.2P-3; System.out.println(d1); System.out.println(d2); System.out.println(d3); System.out.println(d4); System.out.println(-10/0.0); System.out.println(0.0/0); } }
输出结果:
1024.3 1024.0 9.0 0.140625 -Infinity NaN
在 Java 语言中,采用 16 位的 Unicode 编码来保存字符(一个字符占 2 个字节)。
“字节”(Byte)是计算机中的数据存储单元,每个字节包括 8 个二进制“位”(Bit)。计算机内部和硬盘等存储空间的管理都是以字节为基础单位,每个字节都有自己的编号。而“字符”(Char )是人们用作标记的符号,如:‘A’、‘张’等等。
在 Java 中,字符型常量有三种表现形式:
用英文单引号包括起来的单个字符,如:'a'、'汉'
用英文单引号括起来的十六进制字符代码值来表示单个字符,格式:'\uXXXX',其中的 \u 是约定的前缀,而后面的 XXXX 为 4 位十六进制数,是该字符在 Unicode 字符集中的序号。例如:'\u0061'
某些特殊的字符可以采用转义符来表示,如换行和制表符等等(点击查看 Java 转义符)。
示例:
public class TestChar { public static void main(String[] args) { char c1 = 'a'; char c2 = '\u0031'; char c3 = '\n'; System.out.println(c1); System.out.println(c2); System.out.println(c3); } }
输出结果:
a 1
boolean 类型数据用来表示只有两种状态的逻辑值,即 true 和 false,分别代表“是”和“否”。true 和 false 也称 boolean 类型的字面值,字面值指事先约定的某种类型的允许取值。
boolean 类型常用于逻辑运算和程序流程控制,示例如下:
public class TestBoolean { public static void main(String[] args) { boolean flag = true; if(flag) { System.out.println("是"); } else { System.out.println("否"); } } }
输出结果:
是
注意:Java 语言不支持使用 0 和非 0 来作为 boolean 类型值使用。