本教程旨在帮助初学者和中级程序员掌握 Java 编程语言中数据类型的概念和分类。除此之外,您还将探索与数据类型相关的一个重要过程——Java 类型强制转换或数据类型转换。
在任何编程语言中,数据类型都指定了程序员所需的数据的行为。数据类型告诉编译器要存储在变量或标识符中以执行特定操作的数据的类型或大小。因此,从某种意义上说,为变量定义数据类型限制了变量取任何值的自由度。
由于 Java 是一种静态类型编程语言,因此在使用前用适当的数据类型声明变量的重要性非常显著。让我们举个例子
int age;
这里 age 是一个 int 数据类型的变量,这表示变量 age 应该只持有整数值。
现在让我们来探索 Java 数据类型的不同种类。
在 Java 中,数据类型大致分为两类
从上图中,我们已经看到了 Java 中的 8 种原始数据类型。这些数据类型是内置的,不能再被分割。因此被称为原始数据类型。让我们来详细探讨每一种数据类型。
在数学上,整数是不包含任何小数部分的数。整数可以是正数、负数甚至 0,它们共同构成了整数。例如,-20、0、99 等是整数,而 8.5、¾ 等则不是。
像 byte、short、int 和 long 这样的数据类型都属于整型数据类型。
long 变量和 int 变量,long 变量的值应以字母 'L' 结尾。例如,1000000000L。检查下面的例子,以理解整型数据类型在程序中是如何工作的。
public class DatatypeEx {
public static void main(String[] args) {
byte bnum = 126;
System.out.println(bnum); // prints 126
short snum = -32768;
System.out.println(snum); // prints -32768
int inum = 999999999;
System.out.println(inum); //prints 999999999
long lnum = 9999999990 L;
System.out.println(lnum); //prints 9999999990
}
}
浮点数是那些带有小数部分的数,如 3.14、6/7 等。在 Java 中,我们有两种接受带小数点的数字的原始数据类型。它们是
| 数据类型 | 数据大小(位) | 数据大小(字节) | 默认值 |
|---|---|---|---|
| float | 32 位 | 4 字节 | 0.0f |
| double | 64 位 | 8 字节 | 0.0d |
public class DatatypeEx {
public static void main(String[] args) {
float num1 = 9.9 f;
System.out.println(num1); // prints 9.9
double num2 = -3.14;
System.out.println(num2); // prints -3.14
float num3 = 9.999990000000000009990;
System.out.println(num3); //prints error message
}
}
字符数据类型处理字符。与其他编程语言不同,Java 使用 Unicode 系统,因此 char 数据类型表示一个 16 位的 Unicode 字符。char 类型的默认值是 ‘\u0000’,这是 Unicode 系统的最小值。char 类型可以取到的最大值是 ‘\uffff’。
| 数据类型 | 数据大小(位) | 数据大小(字节) | 默认值 |
|---|---|---|---|
| char | 16 位 | 2 字节 | 'u0000' |
如果您有兴趣了解更多关于 Java 为何使用 Unicode 系统的信息,请访问 Java 的 Unicode 系统。
public class DatatypeEx {
public static void main(String[] args) {
char ch1 = '\u0045';
System.out.println(ch1); // prints E
char ch2 = '\u0065';
System.out.println(ch2); // prints e
}
}
布尔是一种特殊的数据类型,它持有两种可能值中的一种,即 True 或 False。这种数据类型通常在评估条件、比较或逻辑或关系运算时使用。
| 数据类型 | 数据大小(位) | 数据大小(字节) | 默认值 |
|---|---|---|---|
| boolean | 1 位 | false |
public class DatatypeEx {
public static void main(String[] args) {
boolean b1=(6>9)?True:False;
System.out.println("Is 6 greater than 9: "+b); // prints False
boolean b2=(9>3)?True:False;
System.out.println("Is 9 greater than 3: "+b); // prints True
}
}
如前所述,非原始数据类型不是基本数据类型,它们是根据程序需求从原始数据类型派生出来的数据类型。换句话说,我们可以说非原始数据类型是用户创建的数据类型。由于非原始数据类型不是由 Java 定义的,因此数据类型的大小不固定,可以是任何长度。与原始数据类型不同,非原始数据类型以大写字母开头。例如,String、Array、Class 等。区分原始数据类型和所谓的引用数据类型的另一个特点是,非原始数据类型可以持有 null 值。
在接下来的教程中,您将学习这些非原始数据类型,如 String、Arrays、Class、Interface 等。
像许多其他编程语言一样,Java 也支持数据类型转换。顾名思义,我们通常可以将类型转换或类型强制转换表述为将一种数据类型转换为另一种数据类型的过程。例如,我们可以将整数数据类型转换为浮点数,反之亦然。转换可以由程序员手动完成,也可以由编译器自动完成。
根据转换策略,在 Java 中,我们有 13 种类型转换。在这 13 种类型中,我们将在这里讨论两种重要的类型转换,即
如果您有兴趣了解更多关于类型转换的信息,请访问 Java 中不同种类的类型转换。
拓宽类型转换是自动将较低数据类型(int)转换为较高数据类型(double)的过程。由于这种转换是由编译器自动完成的,因此也称为自动转换或隐式转换。

public class DatatypeConv {
public static void main(String[] args) {
// creating integer type variable
int inum = 36;
System.out.println("Integer Value :"+ inum);
//converting integer to float type variable
float fnum = inum;
System.out.println("Float Value :"+fnum);
}
}
输出
Integer Value :36 Float Value :36.0
解释:
上面的代码片段显示了将整数转换为浮点数。由于 float 是 int 的更高数据类型,因此在转换时不需要特定的数据类型声明。编译器会自动将值转换为更高的数据类型,在我们的例子中是 float。
由此我们可以推断,当数据类型彼此兼容且目标数据类型的大小大于源数据类型时,就会发生拓宽类型转换。拓宽类型转换确保数据没有任何损失。
缩窄类型转换是将较高数据类型(double)转换为较低数据类型(int)的过程。由于这种转换是由程序员手动完成的,因此也称为显式转换或强制转换。
public class DatatypeConv {
public static void main(String[] args) {
// creating float type variable
float fnum = 14.7f;
System.out.println("Float value :" +fnum);
//Converting float value to int value
int inum = (int)fnum;
System.out.println("Integer value :" +inum);
}
}
输出
Float value :14.7 Integer value :14
解释:
这里我们将一个较高数据类型的值转换为一个较低数据类型的值,这意味着缩窄一个数据类型。因此,我们需要明确指定需要转换到的数据类型,在我们的例子中是 int。
缩窄类型转换与拓宽类型转换正好相反。由于目标数据的大小小于源数据,数据丢失的可能性非常高。因此,必须手动进行类型转换,否则编译器会报告编译时错误。