开场:计算机是以二进制位数来实现各种复杂计算的,既0和1,这也是计算机存储信息的最小单位,我们称之为位(bit)。计算机中存储器的计量单位是字节(Byte)。1 Byte = 8 bit
八大基础数据类型:
Java一共包含八种基本类型,char, boolean, byte, short, int, long, float, double。可以分为三类,分别是:
字符型:char
布尔型:boolean
数值型:byte, short, int, long, float, double
每种基本类型都有自己的包装类,或叫封装类。因为基础数据类型只能进行值传递,它不是一个对象,因此不具备对象的一些基本方法,例如toString()。封装类的出现,使得基本数据类型具有了对象的属性和丰富的方法,而且很多时候需要进行引用传递,就必须使用封装类。
优劣分析:
基本数据类型内存分配在栈上,因为不涉及到对象的构造和回收处理,所以速度很快。
封装类的对象分配在堆上,指向该对象的引用分配在栈上,相比效率会降低,但是它提供了很多的类型转换方法,可以进行引用传递。
数据类型 | boolean | char | byte | short | int | long | float | double |
包装类 | Boolean | Character | Byte | Short | Integer | Long | Float | Double |
所占位数 | 1 | 8 | 16 | 16 | 32 | 64 | 32 | 64 |
数据范围 | true/false | -2^7 ~ 2^7-1 | -2^15 ~ 2^15-1 | -2^15 ~ 2^15-1 | -2^31 ~ 2^31-1 | -2^63 ~ 2^63-1 | -2^31 ~ 2^31-1 | -2^63 ~ 2^63-1 |
自动装箱与拆箱:
Java在JDK5.0之后对基本数据类型提供了自动装箱与拆箱,直白一点就是数据运算时不用来回转换。例如:
List<Integer> integer_list = new ArrayList<Integer>();
integer_list.add(1);//自动装箱,调用了Integer.valueOf()方法
integer_list.add(new Integer(2));
for (int i : integer_list) {
System.out.print(i); //自动拆箱,调用了Integer.intValue()方法
}
类型转换:
char-->byte-->sort-->int-->long-->float-->double
1. 按照上面的顺序,从左往右可以直接转换,例如:char c = 'A'; int i = c; 输出A的ASCII码值65
2. 从右往左需要强制转换,例如:int i = 65; char c = (char)i; 输出A
很多时候,强制转换会引起数据精度丢失,可以使用Java.math下的BigDecimal类来解决,例如
<strong>double d1 = 2.0;
double d2 = 3.0;
BigDecimal b1 = new BigDecimal(Double.toString(d1));
BigDecimal b2 = new BigDecimal(Double.toString(d2));
b1.add(b2).doubleValue();//加法
b1.subtract(b2).doubleValue();//减法
b1.multiply(b2).doubleValue();//乘法
b1.divide(b2).doubleValue();//除法</strong>
3. 包装类型转换成基础数据类型可以使用xxxxValue()方法,例如:
Integer int1= new Integer(10);
int1.floatValue();//Integer对象转换成float类型
int1.doubleValue();//Integer对象转换成double类型
Double d1 = new Double(10.00);
d1.floatValue();//Double对象转换成float类型
d1.intValue();//Double对象转换成int类型
结束:扎实的基础知识是跨越式成长的基石,一起努力夯实它