前言
java是一种强类型语言,必须为每一个变量声明类型。java共有八种基本数据类型,4种整型,分别为int,short,long,byte;2种浮点型,float,double;1种字符型char,还有boolean类型。
1.整型
类型 | 存储需求 | 取值范围 |
---|---|---|
int | 4字节 | 略高于20亿 |
short | 2字节 | -32768 ~ 32767 |
long | 8字节 | 低于10的19次方 |
byte | 1字节 | -128 ~ 127 |
在java中, 整型的范围与运行的机器无关,而c和c++程序会针对不同的处理器选择最高效的整型,这导致了在不同的机器上c程序或c++程序运行可能会发生错误。
注:在java中没有无符号形式的int、long、short、或者byte类型。byte表示-128 ~ 127之间的范围,如果想表示0 ~ 255的范围,可以存储在byte中,在使用时,将其转为int类型。基于此,可以将一组连续的256个的数,使用byte存储,设置编码方式,在使用时解码。可以使用Byte.toUnsignedInt()将一个byte类型的数映射为无符号数。
public class Main {
public static void main(String[] args) {
byte a = -1;
byte b = -128;
byte c = 1;
byte d = 127;
int A = Byte.toUnsignedInt(a);
int B = Byte.toUnsignedInt(b);
int C = Byte.toUnsignedInt(c);
int D = Byte.toUnsignedInt(d);
System.out.println(A);
System.out.println(B);
System.out.println(C);
System.out.println(D);
}
}
输出:
255
128
1
127
2.浮点型
类型 | 存储需求 | 取值范围 |
---|---|---|
float | 4字节 | 大约±3.40282347×1038(6~7位有效数字) |
double | 8字节 | 大约±1.79…×10308(15位有效数字) |
一般情况下float类型不能满足需求,float类型数值有一个后缀(如,3.24f),没有f后缀的小数默认为double类型
浮点型底层与整形底层是不同的,虽然浮点型表示范围大于整形,但浮点型精度小于整形,float 数值被分为三个部分:符号位、指数部分和尾数部分。这个表示法允许表示非常大或非常小的数值范围,但也引入了精度问题。使用浮点型时需要考虑其带来的误差,特别是在比较问题的时候,由于精度限制,比较两个 float 数值是否相等可能会变得复杂。
浮点数的一般结构如下,其中s表示符号位,m是尾数,一个二进制小数,e是指数,用于表示小数点的位置。
(-1)^s * m * 2^e
3.char类型
char用于表示一个16位的 Unicode 字符。Unicode 是一种字符编码标准,它为世界上几乎所有的字符(包括字母、数字、标点符号、符号、汉字等)提供了唯一的数字标识。
注:强烈建议不要再程序中使用char数据类型,最好将字符串作为抽象数据类型处理。
4.boolean类型
在Java中,boolean 类型是一种基本数据类型,用于表示逻辑值。它只有两个可能的取值:true 和 false,用于表示真和假。
boolean 类型通常用于条件判断、循环控制以及其他需要表示真假状态的情况。例如:
boolean isTrue = true;
boolean isFalse = false;
if (isTrue) {
System.out.println("This is true.");
} else {
System.out.println("This is false.");
}
需要注意的是,boolean 类型不同于整数类型,不能直接用数字代表 true 或 false。例如,以下代码是错误的:
boolean incorrect = 0; // This is a compilation error