邢红瑞 发表于 2007-6-8 16:00:58 最近给替一个朋友出的几道java的面试题,主要是面试java高级工程师,报酬就是晚饭,已经沦落的卖艺的境地。题目很简单 Integer i1 = 100; Integer i2 = 100; Integer i3 = 1000; Integer i4 = 1000; System.out.println(i1==i2); System.out.println(i3==i4);很遗憾,没有一个答对的,正确答案是truefalse如果面试者写这样的写是错误的,就算通过。这个的原因要从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]的值可以改变。 坏男孩 2007-06-12 22:39 发表评论