答: 拆箱与装箱发生通常发生在经常使用的数据类型中,也就是八个基本类型,外加一个Stringjava
数据类型 |
包装类 |
说明 |
short |
Short |
|
int |
Integer |
|
long |
Long |
|
float |
Float |
|
double |
Double |
|
byte |
Byte |
|
boolean |
Boolean |
|
char |
Character |
|
String |
String |
|
举例:缓存
Integer a = 3 ;// 自动装箱,java编译器会这样处理 Integer a = Integer.valueOf(3) ,jvm
int b = a; // 自动拆箱,java编译器会这样处理 int b = a.intValue();spa
其它类型与上面相似。code
要避免的坑。ci
1. 当有代码 编译器
String a = "abc"; String b = a; String c = a + ""; String d = new String("abc"); System.out.println(a == b); // true System.out.println(b == c); // false System.out.println(a == c); // false System.out.println(a.equals(b)); // true System.out.println(b.equals(c)); // true System.out.println(a.equals(c)); // true System.out.println(a == d); // false System.out.println("abc" == d); // false 编译
System.out.println("abc" == a); // truetable Integer h = 100; Integer i = 100; Integer j = 200; Integer k = 200;数据类型
int l = 200; int m = 200; System.out.println(h == i); // true System.out.println(j == k); // false System.out.println(j == m); // true System.out.println(l == m); // true Boolean o = true; Boolean p = new Boolean(true); Boolean q = true; System.out.println(o == p); // false System.out.println(o == q); // true
|
解释 ,因为使用自动装箱,所在jvm会缓存一些数据如int (-128-127)因此h ==i是true, j==k 是false;
那么
I,为何j==m 为true呢?
由于其进行了一次拆箱的操做。转为原始类型进行判断。
告诉咱们:
在程序里用常量的时候好比一些状态,尽可能使用127如下的数,使用int定义。
public final static int OP_OPEN = 1;//打开为1