我之所以写这篇博客,是因为我突然意识到基础的重要性,特别对于那些基础的东西,往往可能成为你以后面试的绊脚石,所以现在我们就必须清除这些障碍,下面我简单的总结一下Java的数据类型,大家看了就当做复习吧!
Java语言支持两种类型:基本类型(Primitive Type)和引用类型(Reference Type),下面用一张图片略略展示一下:
整数类型:
这里我把byte、short、int、long、char,我之所以把char归纳进整数类型,因为它在内存中的存储方式也是跟其他整数类型的一样,只不过是在数值在拿出来的时候转化成特定的字符而已。
下面我们看看这些类型的表示范围:
类型 | 内存占用空间 | 范围 |
byte | 1个字节 | -2^7 - 2^7-1 |
short | 2个字节 | -2^15 - 2^15-1 |
int | 4个字节 | -2^31 - 2^31-1 |
long | 8个字节 | -2^63 - 2^63-1 |
char | 2个字节 | 0 - 2^16 |
从上面我们可以看出几点:
1.Java数据类型的范围是规定的,无论在windows还是linux,都一样,这样就保证了跨平台性。
2.Java数据没有像C语言那样有signed和unsigned之分。
3.char类型没有负数的概念。
Java中整数的表达形式有两种必须掌握的,就是八进制和十六进制,八进制以0开头,十六进制以0x或者0X开头,其中10-15分别用a-f来(不区分大小写)表示。
1 public class Scale { 2 3 public static void main(String[] args) { 4 5 /** 6 * 八进制数 7 * @author Guo 8 */ 9 int a = 023; 10 System.out.println(a); 11 12 /** 13 * 十六进制 14 * @author Guo 15 */ 16 int b = 0x32ac; 17 System.out.println(b); 18 } 19 }
Java对于超出范围的数对怎么对待呢?
1 public class OutOfBound { 2 3 public static void main(String[] args) { 4 5 /** 6 * 这里输出127 7 * @author Guo 8 */ 9 byte a = 127; 10 System.out.println(a); 11 12 /** 13 * 这里输出了-128 14 * @author Guo 15 */ 16 byte b = (byte) 128; 17 System.out.println(b); 18 } 19 }
Java对于超出范围的数,依然是按照补码的规则就是计算,就好像在一个范围内循环的感觉。
浮点类型:
Java的浮点类型有两种:float和double,浮点类型有固定的表示范围和字段长度,字段的长度也是与平台无关
数据类型 |
内存占用空间 |
表示范围 |
float |
4个字节 |
-3.403E38-3.403E38 |
double |
8个字节 |
-1.798E308-1.798E308 |
对于float类数值,第1位是符号位,接下来8位表示指数,再接下来的23位表示尾数;
对于double型数值,第1位是符号位,接下来11位表示指数,再接下来的52位表示尾数。
布尔类型:
布尔型只有一个boolean类型,用于表示逻辑上的真假,在Java中,boolean数值只有true或者false
空类型(null Type):
就是null值的类型,这种类型没有名称,因为null类型没有名称,所以不可能声明一个null类型的变量或者转换到null类型,空引用(null)是null类型变量唯一的值,空引用可以转成任何引用类型。