1.基本数据类型
1.1 整型
类型 | 存储需求 | bit数 | 取值范围 | 备注 |
int | 4字节 | 4*8 | -2,147,483,648 ~ 2,147,483,647 | 有符号整数类型 |
short | 2字节 | 2*8 | -32,768 ~ 32,767 | 有符号整数类型 |
long | 8字节 | 8*8 | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 | 有符号整数类型 |
byte | 1字节 | 1*8 | -128 ~ 127 | 有符号整数类型 |
1.2 浮点型
类型 | 存储需求 | bit数 | 取值范围 | 备注 |
float | 4字节 | 4*8 | ±1.4E-45 到 ±3.4E+38,有效位数约为 6-7 位小数 | 单精度浮点数类型。 float类型的数值有一个后缀F(例如:3.14F) |
short | 8字节 | 8*8 | 范围为约 ±4.9E-324 到 ±1.8E+308,有效位数约为 15 位小数 | 双精度浮点数类型。 没有后缀F的浮点数值(如3.14默认为double类型) |
1.3 char类型
在 Java 中,char
类型用于表示 Unicode 字符,其取值范围是从 U+0000 到 U+FFFF(包括 0 到 65535 之间的整数)。
这意味着 char
类型可以表示任意字符,包括字母、数字、特殊符号以及其他语言的字符。Unicode 是一种国际标准编码,涵盖了世界上几乎所有的字符集。
需要注意的是,Java 中的 char
类型是无符号的,因此它不能表示负数或负值。它只能表示正数范围内的 Unicode 字符。
虽然 char
类型可以进行算术运算,但它被视为整数类型。对 char
类型进行运算时,会将其转换为相应的整数值进行计算
类型 | 存储需求 | bit数 | 取值范围 | 备注 |
char | 2字节 | 2*8 |
1.4 布尔类型
在 Java 中,boolean
类型用于表示逻辑值,只有两个取值:true
和 false
。它用于表示真假或条件的结果。
类型 | 存储需求 | bit数 | 取值范围 | 备注 |
boolean | 1字节 | 1*8 | true 或 false |
2.Java基本数据的类型转换
Java 支持自动类型转换(隐式转换)和强制类型转换(显式转换)。
2.1 自动类型转换(隐式转换)
自动类型转换是指将一个数据类型的值直接赋给另一个兼容的数据类型,而不需要显式地进行类型转换。这种转换通常发生在两个类型之间存在从小范围到大范围、从低精度到高精度的关系时。例如,将一个 int
类型的变量赋值给一个 long
类型的变量,或者将一个 float
类型的值赋给一个 double
类型的变量。
代码示例:
public class Demo{
public static void main(String[] args){
int num = 10;
long bigNum = num; // 自动将 int 转换为 long
}
}
Java支持自动类型转换的类型如下所示,左边的数值类型可以自动类型转换成箭头右边的数值类型。
1)byte ->short->int->long->float->double
2)char->int->long->float->double
2.2 强制类型转换(显式转换)
如果希望上面自动转换中,箭头右边的类型转换成左边的类型,则必须进行强制类型转换。
强制类型转换的语法格式:(targetType)value,强制类型转换的运算符是圆括号()。
当进行强制类型转换时,类似于把一个大瓶子里面的水倒入一个小瓶子,如果大瓶子里面的水不多还好,如果大瓶子里面的水很多,将会引起溢出,从而造成数据丢失。
这种类型也称为缩小转换。
注意:当试图强制把表数范围大的类型转换为表示范围小的类型时,必须格外小心,因为非常容易引起信息丢失。
以下是一些基础数据类型的强制类型转换示例:
1.从较小的整数类型向较大的整数类型进行转换:
public class Demo{
public static void main(String[] args){
int smallerInt = 10;
long largerLong = (long) smallerInt; // 强制将 int 转换为 long
System.out.println(largerLong); // 输出:10
}
}
1.从浮点类型向整数类型进行转换(注意小数部分会被截断):
public class Demo{
public static void main(String[] args){
double floatingPoint = 3.14;
int integer = (int) floatingPoint; // 强制将 double 转换为 int
System.out.println(integer); // 输出:3
}
}
3.从较大的整数类型向较小的整数类型进行转换(可能导致溢出):
public class Demo{
public static void main(String[] args){
long largerLong = 9000000000L;
int smallerInt = (int) largerLong; // 强制将 long 转换为 int
System.out.println(smallerInt); // 输出:410065408
}
}
2.3 表达式类型的自动提升
java定义了如下的自动提升规则:
1)所有的byte类型 ,short类型和char类型将被提升到int类型。
2)整个算术表达式的数据类型自动提升到表达式中最高等级操作数同样的类型
public class Demo{
public static void main(String[] args){
//下面2行代码出错,shortValue类型参与运算,类型自动提升到int
// 将一个int类型的值赋给一个short类型的值,编译不过
short shortValue = 5;
shortValue =shortValue +2;
//下面4行代码正确,3个不同类型的值参与运算,类型提升到最高的类型//double,int,byte中,double类型最高,所以结果double类型
byte byteValue =4;
int intValue = 1;
double doubleValue =2.33;
double result=byteValue + intValue + doubleValue;
System.out.println(byteValue + intValue + doubleValue);
//下面代码的类型同样为double
System.out.println(doubleValue /intValue);
}
}