Java是一种强类型语言,我们在定义变量时必须要为变量指定一种类型。Java总共有8种基本类型,分别是char、int、short、long、byte、float、double、boolean。根据数据类型可以整型、浮点型、char和boolean。
整型
类型 | 存储大小 | 取值范围 | 真实数值范围 | 类型默认值 |
---|---|---|---|---|
byte | 1字节 | − 2 7 -2^7 −27 ~ 2 7 − 1 2^7-1 27−1 | -128 ~ 127 | 0 |
short | 2字节 | − 2 15 -2^{15} −215 ~ 2 15 − 1 2^{15}-1 215−1 | -32 768 ~ 32767 | 0 |
int | 4字节 | − 2 31 -2^{31} −231 ~ 2 31 − 1 2^{31}-1 231−1 | -2 147 483 648 ~ 2 147 483 647 | 0 |
long | 8字节 | − 2 63 -2^{63} −263 ~ 2 63 − 1 2^{63}-1 263−1 | -9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807 | 0L |
整型实例
public class PrimitiveType {
static byte by;
static short sh;
static int i;
static long l;
public static void main(String[] args) {
System.out.println("基本类型:byte 二进制位数:" + Byte.SIZE);
System.out.println("包装类:" + Byte.class.getName());
System.out.println("最小值:" + Byte.MIN_VALUE);
System.out.println("最大值:" + Byte.MAX_VALUE);
System.out.println("默认值: " + by);
System.out.println("----------------------------------------------------");
System.out.println("基本类型:short 二进制位数:" + Short.SIZE);
System.out.println("包装类:" + Short.class.getName());
System.out.println("最小值:" + Short.MIN_VALUE);
System.out.println("最大值:" + Short.MAX_VALUE);
System.out.println("默认值: " + sh);
System.out.println("----------------------------------------------------");
System.out.println("基本类型:int 二进制位数:" + Integer.SIZE);
System.out.println("包装类:" + Integer.class.getName());
System.out.println("最小值:" + Integer.MIN_VALUE);
System.out.println("最大值:" + Integer.MAX_VALUE);
System.out.println("默认值: " + i);
System.out.println("----------------------------------------------------");
System.out.println("基本类型:long 二进制位数:" + Long.SIZE);
System.out.println("包装类:"+ Long.class.getName());
System.out.println("最小值:" + Long.MIN_VALUE);
System.out.println("最大值:" + Long.MAX_VALUE);
System.out.println("默认值: " + i);
System.out.println("----------------------------------------------------");
}
}
结果
基本类型:byte 二进制位数:8
包装类:java.lang.Byte
最小值:-128
最大值:127
默认值: 0
----------------------------------------------------
基本类型:short 二进制位数:16
包装类:java.lang.Short
最小值:-32768
最大值:32767
默认值: 0
----------------------------------------------------
基本类型:int 二进制位数:32
包装类:java.lang.Integer
最小值:-2147483648
最大值:2147483647
默认值: 0
----------------------------------------------------
基本类型:long 二进制位数:64
包装类:java.lang.Long
最小值:-9223372036854775808
最大值:9223372036854775807
默认值: 0
----------------------------------------------------
Java整型的数据范围与C和C++不同,JVM已经帮我们屏蔽了处理器位数的问题。C和C++需要根据操作系统位数来选择最高效的整型,否则可能会导致整数溢出。比如在32位处理器运行良好的C或C++程序在16位处理器系统上运行就可能产生不一样的结果。
浮点型
浮点型就是包含了小数的数值。包了float和double,double的存储范围和精度比float要大。
类型 | 存储大小 | 取值范围 | 类型默认值 |
---|---|---|---|
float | 4字节 | 1.4E-45 ~3.4028235E38 | 0.0f |
double | 8字节 | 4.9E-324 ~ 1.7976931348623157E308 | 0.0d |
浮点型实例
public class PrimitiveType {
static float fl;
static double dou;
public static void main(String[] args) {
System.out.println("基本类型:float 二进制位数:" + Float.SIZE);
System.out.println("包装类:" + Float.class.getName());
System.out.println("最小值:" + Float.MIN_VALUE);
System.out.println("最大值:" + Float.MAX_VALUE);
System.out.println("默认值: " + fl);
System.out.println("----------------------------------------------------");
System.out.println("基本类型:double 二进制位数:" + Double.SIZE);
System.out.println("包装类:" + Double.class.getName());
System.out.println("最小值:" + Double.MIN_VALUE);
System.out.println("最大值:" + Double.MAX_VALUE);
System.out.println("默认值: " + dou);
System.out.println("----------------------------------------------------");
}
}
结果
基本类型:float 二进制位数:32
包装类:java.lang.Float
最小值:1.4E-45
最大值:3.4028235E38
默认值: 0.0
----------------------------------------------------
基本类型:double 二进制位数:64
包装类:java.lang.Double
最小值:4.9E-324
最大值:1.7976931348623157E308
默认值: 0.0
----------------------------------------------------
double的精度是float的两倍,double又叫住双精度数值类型。在实际使用中很少会使用到float数值类型。
特别注意的是浮点数不能运用到金融行业。主要原因是浮点数值采用的是二进制系统表示,在二进制系统张无法精确的表示分数比如1/10
。如果需要表示精确的数值不允许有任何舍入误差,就必须使用数据类型BigDecimal
。
浮点数误差实例
public class PrimitiveType {
public static void main(String[] args) {
System.out.println(2.0-1.1);
}
}
实际结果
0.8999999999999999
char类型
char类型用来表示单个字符。char类型的字面量值需要用单引号括起来,与双引号括起来的是完全不一样的含义。char类型的值可以表示为十六进制的数值,其取值范围从\u0000
到\uFFFF
。char的包装类型是java.lang.Character
。
Unicode和char类型
在实际使用中,Unicode可以使用char类型来表示,一个Unicode字符可以是一个char值或两个char值
boolean类型
boolean类型只有两个值:true
和false
。这里要和C++相区别,在C++中数值0相当于boolean值的false
,非0的值相当于boolean的true
,数值和boolean可以相互转换。但在java中是不允许的。