Java语言基础 (数据类型)
目录
前言:
在上一篇中,我们讲解了Java中的注释、关键字和标识符的基础知识。在本篇中,我们将深入探讨Java中的数据类型,Java支持多种数据类型,包括整型、浮点型、字符型等,每种数据类型都有其特定的范围和用途。让我们一起深入学习Java的数据类型吧!
📌 Java 语言支持的数据类型分为两种:基本数据类型(Primitive Type)和引用数据类型(Reference Type)。
一、基本数据类型
Java中的基本数据类型分为4类,分别是整数型、浮点型、字符型和布尔型。
1️⃣ 整数型:
整数型包括byte、short、int和long四种类型,分别表示不同范围的整数值。其中,byte和short通常用于节省内存或处理特定类型的数据,int是最常用的整数类型,long则用于表示更大范围的整数值。
① byte (字节类型): 占用1个字节,表示 - 128 到 127 之间的整数。
基本代码格式:
byte 变量名 = 初始值;
代码实例:
byte value = 20;
🔑 注意:
计算机使用二进制表示数据,字节是二进制数据的单位。
1 Byte = 8 bit
1 KB = 1024 Byte
1MB = 1024 KB
1GB = 1024 MB
② short (短整型):占用2个字节,表示 - 32768 到 32767 之间的整数。
基本代码格式:
short 变量名 = 初始值;
代码实例:
short age = 20;
③ int(整型):占用4个字节,表示 - 2147483648 到 2147483647 之间的整数,是最常用的整数类型。
基本代码格式:
int 变量名 = 初始值;
代码示例:
int num = 0;
④ long (长整型):占用8个字节,表示更大范围的整数值,比int的范围更大。
基本代码格式:
long 变量名 = 初始值;
代码示例:
long num2 = 1L;//也可以写为 1l
🔑 注意:
Java中,所有的基本数据类型的大小(所占用的字节数)都已明确规定,在各种不同的平台上保持不变,这一特性有助于提高 Java 程序的可移植性。
小结:
Java中所有的整数类型都是有符号的整数类型,即它们的最高位表示数值的正负性。因此,Java不支持无符号整数类型。所有的基本整型变量都会被默认初始化为0。
整型常量可以采用四种不同的表示形式,包括二进制、八进制、十进制和十六进制。应该根据实际需求选择不同的表示形式,同时要注意数值的表示范围和精度。
2️⃣ 浮点型:
浮点型包括float和double两种类型,分别用于表示单精度浮点型和双精度浮点型。double是默认的浮点数类型,因为它比float更准确。
① float(单精度浮点型):占用4个字节,可以表示带小数点的数值,但是精度比double要低。
基本代码示例:
float 变量名 = 初始值;
代码示例:
float num3 = 1.0f;//也可以写为 1.0F
② double(双精度浮点型):占用8个字节,可以表示更大范围的带小数点的数值,精度比float更高,是默认的浮点数类型。
基本代码格式:
double 变量名 = 初始值;
代码示例:
double num4 = 1.0d;//也可以写为 1.0D;
🔑 注意:
小数没有精确的,只能说精确到某一位上。浮点数与整数的存储方式不同,不能用2^n计算。如果你给定的值,超过表示的最大值,那么直接报错。
3️⃣字符型:
字符型只有一种类型char,占用2个字节,用于表示单个字符。在Java中,char类型使用Unicode编码表示字符,可以表示所有语言中的字符。
基本语法格式:
char 变量名 = '初始值';
代码示例:
char ch = 'a';
char ch1 = '额';
🔑 注意:
1,Java 中,使用单引号加单个字母表示字符字面值。例如:‘a’ 。
2,计算机中字符本质是一个整数,在C语言中使用ASCII表示字符,而Java中使用 Unicode表示字符,因此一个字符占两个字节,可表示所有语言中的字符。字符型变量的默认值是‘\u0000’。
4️⃣布尔型:
布尔型只有一种类型boolean,占用1个字节,用于表示真或假的值。在Java中,true表示真,false表示假。
基本语法格式:
boolean 变量名 = 初始值 ;
boolean flg = false ;
5️⃣基本数据类型的转换:
对基本类型来说,常见的数据转换方式包括 隐式(自动)类型和强制类型转换;对引用类型而言,只存在强制类型转换一种形式。boolean类型与其他基本类型不能进行类型的转换(既不能进行自动类型的提升,也不能强制类型转换), 否则,将编译出错。
① 强制类型转换(数据范围由大变小):
代码示例:
int a = 5; // int 占 4 个字节
long b = 20L; // long 占 8 个字节
a = (int)b; // 大范围转小范围(强制类型转化)
当我们需要将数值范围较大的数值类型赋给数值范围较小的数值类型变量时,此时可能会丢失精度
② 隐式类型转换(数据范围由小变大):
代码示例:
long a = 25L; // long 占 8个字节
int b = 15; // int 占 4 个字节
long a = b; // 小范围转大范围
隐式类型转换又称为自动类型转换,由系统自动进行。
🔑注意:
类型转换时可能会导致溢出或精度的丢失,另外浮点数到整数的转换是通过舍弃小数得到的,而不是四舍五入。
6️⃣类型提升:
当小类型的数据和大类型的数据进行计算时,会自动进行类型提升,最终的结果变成大类型!
int a = 5;
long b = 20L;
int c = (int)(a + b);
或
long d = a + b;
a 提升为 8个字节与 b 运算 ——> 结果为8个字节。
byte a = 5;
byte b = 10;
byte c = (int)(a + b);
小于4个字节的在运算的时候,会被提升为4个字节。
🔑总结:
1,不同类型数据混合运算,范围小的会提升成范围大的。
2,对于short,byte这种比4个字节小的类型会先提升成4个字节的int,然后再进行运算。
二,Java中的包装类
Java的基本数据类型如int、double等是值类型,没有方法或属性。但是Java提供了对应的包装类,如Integer、Double等,可以将基本数据类型包装为对象。这些包装类提供了许多方法,使得基本数据类型可以像对象一样操作,如比较、转换、格式化等。此外,Java还提供了自动装箱和拆箱的功能,使得基本数据类型和对应的包装类可以方便地进行转换。
int | long | short | byte | double | float | char | boolean |
Integer | Long | Short | Byte | Double | Float | Charactor | Boolean |
当使用“ = ”运算符时,Java编译器会自动进行装箱或拆箱操作,以下是一个例子:
// 定义一个基本类型int的变量
int num1 = 10;
// 将int类型的变量自动装箱为对应的包装类Integer类型
Integer num2 = num1;
// 将Integer类型的变量自动拆箱为对应的基本类型int类型
int num3 = num2;
在上面的例子中,
首先定义了一个基本类型的变量num1,并赋值为10。
int num1 = 10;
接着将该变量赋值给一个包装类Integer类型的变量num2,这时Java编译器会自动将基本类型的变量num1装箱为对应的包装类Integer类型.
Integer num2 = num1; // 自动装箱
Integer num2 = new Integer(num1); // 显示装箱
Integer num2 = Integer.valueof(num1); // 显示装箱
最后,将包装类Integer类型的变量num2赋值给一个基本类型的变量num3,这时Java编译器会自动将包装类Integer类型的变量num2拆箱为对应的基本类型int类型。
int num3 = num2 // 自动拆箱
int num3 = num2.intValue(); // 显示拆箱
int num3 = a.floatvalue(); // 显示拆箱
通过以上例子可以看出,Java包装类确实可以通过" = "运算符自动完成基本类型和包装类之间的类型转换。
三、复合数据类型
上面所说的4类8种基本数据类型,是Java的内置类型。在很多应用程序开发中,仅使用这几种类型是远不够的。一般将用户定义的新类型称为复合数据类型。Java中的复合数据类型包括数组、字符串、枚举 和 类 等。
数组(Array)是一组相同类型的元素的集合。在Java中,数组可以是基本类型或对象类型。声明一个数组时需要指定数组的类型和大小。
这里给大家列出来一部分,后续再进行详细解释。
基本语法格式:
元素类型[] 数组名 = new 元素类型[元素个数或数组长度];
元素类型[] 数组名 = new 元素类型[]{元素,元素,……};
元素类型[] 数组名 = {元素,元素,……};
代码示例:
int[] array = new int[10];
int[] array1 = new int[]{1,2,3,4,5};
int[] array2 = {1,2,3,4,5};
字符串(String)是由一组字符组成的序列,用于表示文本。在Java中,字符串是一个对象,它有自己的类String。字符串可以通过加号连接起来,也可以使用StringBuilder和StringBuffer来动态构建。
① 在字符串当中,如果两个字符串相加,那么他的意思是拼接。
String str1 = "hello";
String str2 = "world";
System.out.println(str1 + str2 + “ !”);
代码结果:
int a = 10;
int b = 20;
System.out.println("a = " + a);
System.out.println("b = " + b);
System.out.println("a + b" +" = "+ (a+b));
System.out.println(a + b +" "+"是 a + b 的和");
代码结果:
② 基本数据类型与字符串之间的转换:
在编程中,基本数据类型和字符串之间的转换是常见操作,基本数据类型和字符串之间的转换可以帮助程序员在不同的数据类型之间进行转换,从而使他们更轻松地处理数据,展示数据和存储数据。
✔ int 转化 string :
int a = 12345;
String ret = String.value(a);
System.out.println(ret);
代码结果:
✔ float 转化 string:
float f = 12.5f;
String ret = String.valueOf(f);
System.out.println(ret);
代码结果:
✔ String 转化 int:
String str = "12345";
int ret2 =Integer.valueOf(str);
System.out.println(ret2);
代码结果:
✔ String 转化 double:
String str3 = "1.25";
double d = Double.valueOf(str3);
//double d = Double.parseDouble(str3); 两个效果相同
System.out.println(d);
代码结果:
枚举 是一种特殊的类,它限定了一组有限的值。枚举类型可以在switch语句中使用,并且可以用于表示状态、选项和其他有限的值。
类(class)是Java中最重要的复合数据类型,它是对象导向编程的基础。类定义了对象的属性和行为,并提供了一种封装数据的方式,从而实现了数据隐藏和安全性。
总结:
Java中的数据类型非常丰富,开发人员需要根据程序需要选择适当的数据类型。了解各种数据类型的特点和使用方法,有助于提高程序的效率和可读性。除了以上介绍的数据类型,Java还支持许多其他数据类型,例如日期、时间和大数据类型等。在实际开发中,根据需求选择合适的数据类型是非常重要的。
✨由衷感谢您的阅读,写作是一项漫长而不易的艰辛过程,若能得到您的点赞、评论和关注,作者会由衷感到欣喜。✨