题目很简单 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]的值可以改变。 |