邢红瑞 发表于 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); 很遗憾,没有一个答对的,正确答案是 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]的值可以改变。
|
|
posted on 2007-06-12 22:39
坏男孩 阅读(5986)
评论(3) 编辑 收藏 所属分类:
java命令学习