基本数据类型
Java是一种强类型语言,这意味着必须为每一个变量声明一种类型。在Java中,一共有8种基本类型,其中包括4种整型、2种浮点型、1种用于表示Unicode编码的字符单元的字符类型char和1种用于表示真值的boolean类型。
1.整型
整型用于表示没有小数的数值,有正负之分。Java一共有四种整型:
类型 | 存储需求 | 取值范围 |
---|---|---|
byte | 1字节 | -128 ~ 127 |
short | 2字节 | -32 768 ~ 32 767 |
int | 4字节 | -2 147 483 648 ~2 147 483 647 (正好超过20亿) |
long | 8字节 | -9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807 |
注:Java中没有任何无符号类型(unsigned type)
2.浮点类型
浮点型用于表示有小数部分的数值,同样有正负之分。在Java中有两种浮点类型:
类型 | 存储需求 | 取值范围 |
---|---|---|
float | 4字节 | 大约 ± 3.402 823 47E + 38F (有效位数为6~7位) |
double | 8字节 | 大约 ± 1.797 693 134 862 315 70E + 308(有效位数为15位) |
double表示这种类型的数值精度是float类型的两倍(称为双精度型)。绝大部分应用程序都采用double类型。
注:float类型的数值有一个后缀F(例如,3.141F)。没有F后缀的浮点类型数值(例如,3.141)默认为double类型。也可以在浮点数值后面添加后缀D(例如,3.141D)。
3. char类型
char类型用于表示单个字符。通常用来表示字符常量。例如,'A’是编码为65所对应的字符常量。
特殊字符的转义字符序列
4.boolean类型
boolean(布尔)类型有两个值:false和true,用来判定逻辑条件。整数值和布尔值之间不能进行相互转换。
数值类型之间的转换
在程序运行时,经常需要把一种数值类型转换为另一种数值类型。包括自动(隐式)类型转换和强制类型转换。
1.自动类型转换
自动类型转换不会导致数据的丢失。下图给出了数值类型之间的合法转换:
在图中有6个实心箭头,表示无信息丢失的转换,有三个虚箭头,表示可能有精度损失的转换。例如,123 456 789是一个大整数,它所包含的位数比float类型所能够表达的位数多。当将这个整型数值转换为float类型时,将会得到同样大小的结果,但却失去了一定的精度。
int n=123456789;
float f=n; // f is 1.23456792E8
当使用上面两个数值进行二元操作时(例如,n+f),先将两个操作数转换为同一种类型,即转换成float类型,然后进行计算。
2.强制类型转换
在必要时,int类型的只能可以自动转换成double类型。但另一方面,有时也需要将double类型转换为int。在Java中,允许进行这种数值之间的类型转换。当然,有可能丢失一些信息。在这种情况下,可以通过强制类型转换实现这个操作。
强制类型转换的语法格式是在圆括号中给出想要转换的目标类型,后面紧跟待转换的变量名。例如:
double a=3.141;
int x=(int)a;
这样,变量x的值为3。强制类型转换通过截断小数部分将浮点型转换为整型。
注:如果试图将一个数值从一种类型强制为另一种类型,而又超出了目标类型的表示范围,结果就会截断为一个完全不同的值。例如,(byte)300的实际值为44。