面试之java基础:8个基本数据类型
- 概念
- 基本数据类型及描述
- 封装类
- 自动拆箱和自动装箱(JDK1.5版本后)
概念
在Java语言中有两种数据类型,为基本数据类型和引用数据类型。基本数据类型总共有8种,分别为byte、short、int、long、float、double、boolean、char。在程序开发过程中,我们通过以上8个关键字来定义存储对应类型数据的变量。
基本数据类型及描述
数据类型 | 字节长度 | 范围 | 默认值 | 包装类 |
int | 4 | -231~231-1 | 0 | Integer |
short | 2 | -215~215-1 | 0 | Short |
long | 8 | -263~263-1 | 0L或0l | Long |
byte | 1 | -27~27-1 | 0 | Byte |
float | 4 | 32位IEEE7754单精度范围 | 0.0F或0.0f | Float |
doublle | 8 | 64位IEEE7754双精度范围 | 0.0 | Double |
char | 2 | Unicode[0,65535] | u0000 | Character |
boolean | 1 | true或false | false | Boolean |
以上的基本数据类型可以分为四类:
(1)int长度数据类型:byte、short、int、long
这四个基本数据类型的取值范围:b=字节长度*8,范围为-2b-1~2b-1-1
(2)小数点类型:float单精度、double双精度
(3)boolean类型
(4)char类型:使用Unicode编码的字符类型
封装类
为什么需要封装类?
①基本数据类型是值传递,封装类是引用传递,在实际运用中,如果你想用一个int对象的引用,那么就需要使用到封装类。
②基本数据类型不能调用方法,而封装类提供了很多的方法,比如valueOf()、toString()等,使得程序中处理起数据更简便。
注意:Int和char的包装类为Integer和Character,其他包装类都是基本类型首字母大写
装箱:
Integer i = new Integer(10);
拆箱:
int a = i.intValue();
自动拆箱和自动装箱(JDK1.5版本后)
封装类变为基本数据类型的过程叫做自动拆箱;基本数据类型变为封装类的过程叫做自动装箱。
Integer i =10;
int a = i;
自动拆箱和装箱的好处:
①代码简洁:由于自动拆装箱,使得Integer和int可以互相转化,我们可以直接对Integer进行加减等运算,转换的过程交给JVM。
②节约内存:
看一个代码示例:
Integer i1 = 44;
Integer i2 = 44;
Integer i3 = 130;
Integer i4 = 130;
System.out.println(i1==i2);//true
System.out.println(i3==i4); //false
为什么1和2是true的,到了3和4就成了false了?
来看一下Integer的源码:
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
//low为-128,high为127
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
通过观察源码,我们可以看到,当传入的int值为-128到127之间的时候,包装成封装类后会存放在内存中来给予重用,因为Integer比较的是引用对象,1和2的对象没有变过所以返回true;而当这个数值超过这个范围后,valueOf这个方法会生成一个新的Integer对象,所以两次定义就创建了两个对象,那么结果也就返回false了。
这个数据范围也叫做自动装箱池,对于创建一些小数值时的包装类对象时,就会进行复用,从而节省了内存和对象创建的开销。