目录
前言
本文介绍Java中的基本数据类型,共有8种,是Java编程的基础。编程的实质就是操作数据,而数据有不同的类型,Java是强类型语言,所以数据类型部分要熟练掌握。
一、数据类型分类
在 Java 中,变量是用于存储数据的内存位置,我们声明一个变量要告诉编译器变量的名称和类型,以便为其分配内存空间。还记得变量声明的语法吗?下面代码中的 int
指定了变量的数据类型为整数类型。
java
// 定义年龄变量
int age;
还有其他数据类型吗?是有的。在 Java 中,数据类型可以分为两大类:基本数据类型(原始数据类型)和引用数据类型。
1.基本数据类型
基本数据类型(原始数据类型)是 Java 语言的基础数据类型,它们的值存储在变量中。Java 提供了以下基本数据类型:
- 整数类型:
byte
、short
、int
、long
- 浮点类型:
float
、double
- 字符类型:
char
- 布尔类型:
boolean
2.引用数据类型
引用数据类型(也称为对象数据类型)是指除了原始数据类型以外的数据类型。它们引用在内存中创建的对象。Java 提供了一些内置的引用数据类型:
- 类(
Class
) - 接口(
Interface
) - 数组(
Array
) - 枚举(
Enum
)
二、基本数据类型
在 Java 中,基本数据类型有8种,不同的数据类型各自占用不同的内存空间,并具有不同的取值范围和精度。具体内存占用大小及取值范围如下:
在 Java 中,数据类型的选择取决于你所要处理的数据以及对内存使用和性能的要求。了解 Java 数据类型对于编写正确的代码和有效地管理内存是非常重要的。我们可以根据具体的数据需求来选择合适的数据类型,并在程序中进行正确的类型转换和操作。
1.整数类型
整数是数学中的一种基本概念,也是计算机科学中常用的数据类型之一。整数是不带小数部分的数字,包括正整数、负整数和零。
在 Java 中,byte
、short
、int
、long
属于整数类型,它们的取值范围由小到大,内存占用也是由小到大。其中最常用的是 int
类型,所以如果直接给出一个整数值的话默认就是 int
类型。byte
类型在一些需要节省内存空间的情况下非常有用,比如音频、图像处理以及网络传输等。long
类型在需要表示较大整数值时非常有用。short
类型是在知道数据范围不超过 short
类型的时候使用,可以节省空间。
java
public static void main(String[] args) {
// byte类型
byte b = 100;
// short类型
short s = 1000;
// int类型
int i = 10000;
// long类型
long l = 100000000000L;
}
在上述代码中,将 100 和 1000 两个在 byte
和 short
类型的取值范文内的数值赋给一个 byte
和 short
变量,Java 也会自动将它们当成 byte
和 short
数据类型来处理。
我们将一个在 int
数据类型范围内的数值赋给 long
类型,这时 Java 依然会将这个整数值当成 int
来处理。如果数值范围超出了 int
类型,会编译报错:整数太大。所以我们要在整数值后面添加 L
或 l
作为后缀,又因为小写字母 l
和数字 1
容易混淆,所以使用大写 L
。
2.浮点类型
科学计数法(也称为浮点表示法)是一种用于表示和处理非常大或非常小的数值的方法。它包括两个主要组成部分:尾数和指数。尾数(Mantissa)是一个带有小数点的数字,通常位于范围1到10之间。指数(Exponent)表示小数点的移动位置,并告诉我们要将尾数乘以多少次幂。
在 Java 中,float
、double
属于浮点类型,float
是单精度浮点数,可表示小数点后6到7位有效数字,double
是双精度浮点数,可表示小数点后15到16位有效数字。对于浮点类型默认是 double
类型,如果希望 Java 将浮点数当成 float
类型处理,需要在浮点数后添加 f
或 F
后缀。
在如下的示例代码中,变量 f
和 d
都赋值为3.1415,但是它们是有区别的,float
类型内存占用4个字节,而 double
类型占用8个字节。
java
public static void main(String[] args) {
// float类型
float f = 3.1415f;
// double类型
double d = 3.1415d;
}
在使用时,也需要注意浮点类型可表示的小数点后面的有效数字。
java
public static void main(String[] args) {
// float类型
float f = 3.14151233442587612312f;
// double类型
double d = 3.14151233442587612312d;
System.out.println(f);
System.out.println(d);
}
查看执行结果:
3.字符类型
字符指类字形单位或符号,包括字母、数字、运算符号、标点符号和其他符号,以及一些功能性符号。字符是电子计算机或无线电通信中字母、数字、符号的统称,其是数据结构中最小的数据存取单位,通常由8个二进制位(一个字节)来表示一个字符。
在 Java 中,字符型数据类型用于表示单个字符,且需要使用单引号('
)括起来。可以表示 Unicode 字符集中的字符。它可以表示范围从 '\u0000
'(即字符0)到 '\uffff
'(即字符65535)的字符。
字符型的值有三种表示形式:
- 直接使用单个字符:
'A'
、'9'
- 使用转义字符表示特殊字符:
'\n'
表示换行符,'\t'
表示制表符等 - 使用Unicode编码值表示字符型值:
'\u0041'
表示字符'A'
('\u'
前缀和4个十六进制数字组成)
java
public static void main(String[] args) {
// char类型
char a = 'A';
char b = '\n';
char c = '\u0041';
System.out.println(a);
System.out.println(b);
System.out.println(c);
}
上述代码执行,没有编译错误,说明字符型变量声明成功。这里也需要注意字符型数据类型是用来表示单个字符的,不能用来表示字符串(一串字符)。
java
public static void main(String[] args) {
// char类型,不能表示一串字符,会编译报错
char a = 'ABC';
}
编译结果如下:
同时字符型在计算机底层保存的是对应编号,所以字符型也可直接作为整数值使用。
java
public static void main(String[] args) {
// char类型
char a = 'A';
System.out.println(a+16);
}
运行结果如下:
4.布尔类型
布尔类型在计算机科学中被称为布尔(Boolean)类型,以纪念数学和逻辑学奠基人乔治·布尔(George Boole)。
乔治·布尔是19世纪英国的一位数学家和逻辑学家,他提出了一种被称为布尔代数(Boolean Algebra)的逻辑系统。布尔代数是一种数学分支,基于二元逻辑,用于表示和操作真和假(或者称作1和0)的值。它具有逻辑运算符(如与、或、非)和逻辑规则,被广泛应用于逻辑电路、计算机科学和变种。
布尔类型只有 boolean
数据类型,用于表示真假,只有两个可能的取值:true
和 false
。布尔类型用于条件判断和逻辑运算,以控制程序的流程和行为。
java
public static void main(String[] args) {
// boolean类型,值只能是true或false
boolean a = true;
boolean b = false;
}
注意布尔类型的变量值只能是 true
或 false
,不能是其他任何值。
三、基本数据类型转换
在 Java 中有8种 基本数据类型,其中7种 是数值类型,分别是 byte
、short
、int
、long
、float
、double
、char
,它们之间经常需要相互转换。Java 提供了两种类型转换方式:自动类型转换(隐式转换)和强制类型转换。
1.自动类型转换
Java 中的数值类型可以相互转换,当一个表达式中出现不同类型的数据时,Java 会根据一定的规则自动将其中较小范围的数据类型转换为较大范围的数据类型,以保证数据不丢失。自动转换是安全的,不需要显式进行类型转换。
以下是自动转换的规则(由低到高):
- byte → short → int -> long → float → double
- char → int → long → float → double
java
public static void main(String[] args) {
// 定义byte类型变量
byte bNum = 100;
// byte类型赋值给int类型,自动转换
int iNum = bNum;
System.out.println(iNum);
// int类型赋值给double类型,自动转换,输出100.0
double dNum = iNum;
System.out.println(dNum);
// 定义char类型变量
char cNum = 'A';
// char类型赋值给long类型,自动转换,输出65
long lNum = cNum;
System.out.println(lNum);
}
如果不按照自动换行规则,现将 char
类型赋值给 short
类型:
java
public static void main(String[] args) {
// 定义char类型变量
char cNum = 'A';
// char类型赋值给short类型,编译报错:不兼容的类型: 从char转换到short可能会有损失
short sNum = cNum;
System.out.println(sNum);
}
2.强制类型转换
如果按照规则反向赋值可以吗,是可以的,但是必须进行强制类型转换。需要使用前置类型转换操作符:()
,具体语法是:(targetType) value
,targetType
是目标类型。强制转换可能会导致数据精度的损失或溢出,因此在进行强制转换时要格外小心,确保转换是安全的。
java
public static void main(String[] args) {
// 强制转换为int类型
double num = 3.14;
int result = (int) num;
System.out.println(result); // 输出:3
// 强制转换为char类型
int value = 65;
char ch = (char) value;
System.out.println(ch); // 输出:A
}
需要注意的是,在进行强制转换时,需要采用合适的转换方式以确保数据的正确转换和操作。
总结
在 Java 中,数据类型可以分基本数据类型和引用数据类型。基本数据类型有8种:byte
、short
、int
、long
、float
、double
、char
、boolean
。其中7种数据类型为数值类型,它们之间可以相互转换,要遵守转换规则。分为自动类型转换和强制类型转换。