目录
基本数据类型
序号 | 类型名称 | 默认值 | 大小 | 最小值 | 最大值 | 包装类 | 缓冲区间 |
1 | boolean | false | 1B | 0(false) | 1(true) | Boolean | 无 |
2 | byte | (byte)0 | 1B | -128 | 127 | Byte | -128 ~ 127 |
3 | char | '\u0000' | 2B | '\u0000' | '\uFFFF' | Character | (char)0 ~ (char)127 |
4 | short | (short)0 | 2B | -2^15 | 2^15 - 1 | Short | -128 ~ 127 |
5 | int | 0 | 4B | -2^31 | 2^31 - 1 | Integer | -128 ~ 127 |
6 | long | 0L | 8B | -2^63 | 2^63 - 1 | Long | -128 ~ 127 |
7 | float | 0.0f | 4B | 1.4e-45 (1.4 * 10^-45) | 3.4e+38 (3.4 * 10^38) | Float | 无 |
8 | double | 0.0d | 8B | 4.9e-324(4.9 * 10^-324) | 1.798e+308(1.798 * 10^308) | Double | 无 |
Number类
在包装类中Byte、Short、Integer、Long、Float、Double都继承了抽象类Number。
public abstract class Number implements java.io.Serializable { public abstract int intValue(); public abstract int longValue(); public abstract int floatValue(); public abstract int doubleValue(); public byte byteValue() { return (byte)intValue(); } public short shortValue() { return (short)intValue(); } }
缓存区间
整数类型Byte、Short、Integer、Long都有对应的缓存操作,缓存范围都是-128 ~ 127,通过内部类实现。
private static class ByteCache { private ByteCache(){} static final Byte cache[] = new Byte[-(-128) + 127 + 1]; static { for(int i = 0; i < cache.length; i++) cache[i] = new Byte((byte)(i - 128)); } }
经典例子:
public static void main(String[] args) { Integer a1 = 1; Integer a2 = 1; Integer b1 = 128; Integer b2 = 128; System.out.println(a1 == a2); // true System.out.println(b1 == b2); // false }
Integer是应用最广泛的数据类型之一,它是唯一可以修改缓存范围的包装类,在VM options加入参数 -XX:AutoBoxCacheMax=666,即可以设置最大缓存值666。
包装类的共性
1. 具有基本数值作为参数的构造函数。例如:Integer i = new Integer(66);
2. 具有字符串作为参数的构造函数。例如Integer i = new Integer("-12");如果字符串内容与当前包装类型不匹配,会抛出NumberFormatException异常,例如Integer i = new Integer("-12.5");
3. 具有返回对象基本值的typeValue方法,例如int num = i.intValue();
4. 具有将字符串转换为基本值的parseType方法,例如int num = Integer.parseInt("56");
5. 所有包装类都覆写了hashCode与equals方法,以提供对Map的支持。
6. equals方法用于比较同一类型两个对象的值是否相等,不要使用"=="。
7. 具有将值转成字符串的方法toString()方法。
8. 都支持自动装箱与拆箱,大大方便了基本数据类型与它们包装类的使用。
数据类型转换
1. 自动类型转换:把某种基本类型的值直接赋给另一种基本类型的变量。
2. 强制类型转换:把数范围大的类型转换为表数范围小的类型。需要注意,由于是从大范围强转到小范围,容易引起信息丢失,例如:
int a = (int) 2.26d; // 2
int b = (int)1000000000000L; // -727379968
3. 自动提升规则:当一个算术表达式中包含多个基本类型的值时,所有的byte、short和char类型会被提升到int类型。