最近替一个朋友出的几道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。
在jdk1.4.2中,
必须是// Assigning primitive type to wrapper type
Integer iWrapper = new Integer(10);
java5中
// Assigning primitive type to wrapper type
Integer iWrapper = 10;
在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]的值可以改变。
package Test; /** * Created by Whatled on 2016/8/20. */ public class BoxingTest { public static void main(String[] args) { Integer i1 = 100; Integer i2 = 100; Integer i3 = 1000; Integer i4 = 1000; System.out.println(i1==i2); System.out.println(i3==i4); System.out.println(0L == 0); System.out.println(((Long)0L).equals(0)); } }
来自:http://www.blogjava.net/badboyryan/archive/2007/06/12/123733.html
建议去看看评论。