题目很简单
Integer i1 = 100;
Integer i2 = 100;
Integer i3 = 1000;
Integer i4 = 1000;
System.out.println(i1==i2);
System.out.println(i3==i4);
正确答案是
true
false
这个的原因要从java5的Boxing和unboxing谈起,boxing就是封装基本类型的对象,unboxing就是转换对象到基本类型。
Integer, Long, Float, Double, Short, Character etc.都是这样的类型他们是immutable。
Boxing
在jdk1.4.2中,
必须是// Assigning primitive type to wrapper type
Integer iWrapper = new Integer(10);
java5中
// Assigning primitive type to wrapper type
Integer iWrapper = 10;
unboxing
在jdk1.4.2中,
int iPrimitive = iWrapper.intValue();
java5中
int iPrimitive = iWrapper;
下面是基本类型作为对象存储的范围,
boolean values true and false
All byte values
short values between -128 and 127
int values between -128 and 127
char in the range \u0000 to \u007F
如果int values between -128 and 127,VM使用相同的对象,否则创建新的对象。
所以这段代码,大家不要奇怪
System.out.println(0L == 0);
System.out.println(((Long)0L).equals(0));
第二行代码是0不等于0
因为大家犯这样的一个错误
static private final String LOCK = "LOCK";
void testMethod() {
synchronized(LOCK) {
...
}
}
应该用new,不要直接=,对于int,最好使用int a[0] ,因为array也是对象,不像Integer,a[0]的值可以改变。