目录
|
| byte | short | int | long | float | double | char | boolean |
| 位数 | 8 | 16 | 32 | 64 | 32 | 64 | 16 | 1 |
| 字节数 | 1 | 2 | 4 | 8 | 4 | 8 | 2 | 1(1/8) |
| 默认值 | 0 | 0 | 0 | 0L | 0.0f | 0.0d |
| false |
| 包装类型 | Byte | Short | Integer | Long | Float | Double | Character | Boolean |
| 包装类 | 包装类转基本类型 | 基本类型转包装类 |
| Byte | Byte.valueOf(byte) | byteInstance.byteValue() |
| Short | Short.valueOf(short) | shortInstance.shortValue() |
| Integer | Integer.valueOf(int) | integerInstance.intValue() |
| Long | Long.valueOf(long) | longInstance.longValue() |
| Float | Float.valueOf(float) | floatInstance.floatValue() |
| Double | Double.valueOf(double) | doubleInstance.doubleValue() |
| Character | Character.valueOf(char) | charInstance.charValue() |
| boolean | Boolean.valueOf(booleann) | booleanInstance.booleanValue() |
Integer i = 10; //装箱
int n = i; //拆箱
装箱其实就是调用了 包装类的valueOf()方法,拆箱其实就是调用了 xxxValue()方法。
因此,
Integer i = 10 等价于 Integer i = Integer.valueOf(10)
int n = i 等价于 int n = i.intValue();
注意:如果频繁拆装箱的话,也会严重影响系统的性能。我们应该尽量避免不必要的拆装箱操作。
- private static long sum() {
-
- // 应该使用 long 而不是 Long
-
- Long sum = 0L;
-
- for (long i = 0; i <= Integer.MAX_VALUE; i++)
-
- sum += i;
-
- return sum;
-
- }
- Integer i1 = 40;
-
- Integer i2 = 40;
-
- Integer i3 = 0;
-
- Integer i4 = new Integer(40);
-
- Integer i5 = new Integer(40);
-
- Integer i6 = new Integer(0);
-
- int i7 = 40;
-
-
-
- System.out.println("i1=i2 " + (i1 == i2));// 输出 true,发生自动装箱,所以都是在常量池中
-
- System.out.println("i1=i2+i3 " + (i1 == i2 + i3));// 输出 true, +操作符不适用Integer类型, 所以i2和i3会自动拆箱进行数值相加, 即i1==40, 作比较的时候i1会自动拆箱,即40==40,true;
-
- System.out.println("i1=i4 " + (i1 == i4));// 输出 false, i1是自动装箱产生的, 而i4是new出来的, 一个在常量池, 一个在堆, 故不等;
-
- System.out.println("i1=i7 " + (i1 == i7));// 输出 true, 会自动拆箱转换成int进行比较;
-
- System.out.println("i4=i5 " + (i4 == i5));// 输出 false, new会开辟新的内存空间,故两个new出来的必不等;
-
- System.out.println("i4=i7 " + (i4 == i7));// 输出 true, i7是数值类型, 所以i4会自动拆箱, 然后进行比较;
-
- System.out.println("i4=i5+i6 " + (i4 == i5 + i6));// 输出 true, +操作符不适用Integer类型, 所以i5和i6会自动拆箱进行数值相加, 即i4==40, 作比较的时候i4会自动拆箱,即40==40,true;
-
- System.out.println("40=i5+i6 " + (40 == i5 + i6));// 输出 true, +操作符不适用Integer类型, 所以i5和i6会自动拆箱进行数值相加, 即i1==40, 作比较的时候i1会自动拆箱,即40==40,true
-
-
-
- Integer a1 = 128;
-
- Integer b1 = 128;
-
- System.out.println(a1 == b1); // false
-
- Integer a2 = 127;
-
- Integer b2 = 127;
-
- System.out.println(a2 == b2); // true
-
-
-
- Float i11 = 333f;
-
- Float i22 = 333f;
-
- System.out.println(i11 == i22);// 输出 false
-
-
-
- Double i3 = 1.2;
-
- Double i4 = 1.2;
-
- System.out.println(i3 == i4);// 输出 false
记住:所有整型包装类对象之间值的比较,全部使用 equals 方法比较。
