欢迎收看基础通关手册第二章第二节!本节我们介绍Java数据类型及其转换。
Java语言是强类型语言,每一种数据都定义了明确的数据类型,不同类型变量占用内存大小不同,取值范围不同。
Java支持数据类型分为两类:
基本数据类型(本节重点讲解 ):
- 整型 byte、short、int、long
- 浮点型 float、double
- 字符类型 char
- 布尔类型 boolean
引用数据类型:
- 数组
- 类
- 接口
8种基本数据类型的内存占用,取值范围如下表所示:
注:E+38表示是乘以10的38次方。
接下来我们详细介绍一下4大基本数据类型:
1)整数型
byte:是最小的整数类型,适合用于节省内存,例如在处理文件或网络流时存储小范围整数数据。
short:较少使用,通常用于在需要节省内存且数值范围在该区间的场景。
int:最常用的整数类型,可满足大多数日常编程中整数计算的需求。
long:用于表示非常大的整数,当 int
类型无法满足需求时使用,定义时数值后需加 L
或 l
。
2)浮点型
float:单精度浮点数,用于表示小数,精度相对较低,定义时数值后需加 F
或 f
。
double:双精度浮点数,精度比 float
高,是 Java 中表示小数的默认类型。
3)字符类型
char:用于表示单个字符,采用 Unicode 编码,可表示各种语言的字符。
4)布尔类型
boolean:用于逻辑判断,只有两个取值true、flase,常用于条件判断和循环控制等逻辑场景。
了解了数据类型后,我们再介绍一下数据类型的转换。
在变量赋值及算术运算的过程中,经常会用到数据类型转换,分为隐式类型转换和显式类型转换。
隐式类型转换:也称自动类型转换,当目标类型的范围大于源类型时,Java会自动将源类型转换为目标类型,不需要显式的类型转换。
情形1:赋值过程中,小数据类型值或变量可以直接赋值给大类型变量,类型会自动进行转换:
public class Case1{
public static void main(String[] args){
//int 类型的值 赋值给long类型变量
long num = 10;
System.out.println(num);
//float类型值 赋值给double类型变量
double price = 8.0F;
System.out.println(price);
char c = 'a';
//char 赋值给int
int t = c;
System.out.println(t);
//下面会编译报错
//float pi = 3.14;
//int size = 123L;
//int length = 178.5;
}
}
情形2:byte、short、char类型的数据在进行算术运算时,会先自动提升为int,然后再进行运算:
public static void main(String[] args){
byte b = 10;
short s = 5;
//(byte->int)+(short->int)
//int + int
//结果为int
int sum = b + s;
//short sum2 = b + s;
//编译报错,int 无法自动转换为short进行赋值
System.out.println(sum);
}
情形3:其他类型相互运算时,表示范围小的会自动提升为表示范围大的,然后再运算:
public static void main(String[] args){
byte b = 10;
short s = 5;
double d = 2.3;
//(byte 10->int 10 - 5) * (short 5-> int 5) -> 5*5 = 25
//int 25 + double 2.3
//double 25.0 + double 2.3
double t = (b - 5) * s + d;
//double 赋值给 float ,编译报错
//float f = (b - 5) * s + d;
System.out.println(t);
}
显式类型转换: 也叫强制类型转换,当目标类型的范围小于源类型时,需要使用强制类型转换将源类型转换为目标类型。语法为:目标类型 变量名 = (目标类型)源类型
案例展示:
public static void main(String[] args){
//1.1数据赋值 强制类型转换
float f1 = (float)3.14;
System.out.println(f1); //3.14
//1.2数据赋值 强制类型转换
int size = (int)123L;
System.out.println(size); //123
//2.变量赋值 强制类型转换
double len = 178.5;
int length = (int)len;
System.out.println(length); //178 会截断,而非四舍五入!!
//3.表达式赋值 强制类型转换
byte b = 10;
short s = 5;
double d = 2.3;
float f2 = (float)((b - 5) * s +d);
System.out.println(f2); //27.3
}
注意:强制类型转换时,得到的结果可能与期望值不同!
这节到这里就结束啦,我们下节见~