日期:2014-05-20  浏览次数:20658 次

Integer的疑问
请看以下代码:



Integer x = 3;
Integer y = 3;
System.out.println(x == y);

第一、请问以上代码的打印结果为什么是true?




再看以下代码:

Integer x = 3;
Integer y = new Integer(3);
System.out.println(x == y);

第一、请问以上代码的打印结果为什么是false?

请从内存的角度来解释问题,谢谢大家!


------解决方案--------------------
这涉及Interger的享元模式 Interger在一定范围内的数据(多大范围我忘记了)会进行享元,所谓享元就是你第一次Integer x = 3;Integer会去内存中找是否存在这个对象,如果存在则直接用存在的那个对象,如果不存在则就new一个对象。当你第一次new的时候发现没有则就new出来一个对象,第二次new的时候发现内存中有了一个这个对象则直接把引用指向了那个对象。Integer x = 3; Integer y = new Integer(3); System.out.println(x == y); 这个为false的原因是你第二次不管内存中有没有都自己new出来了一个其实这个的理解就是String一样,难点主要在Interger的享元模式(一定范围内)..


------解决方案--------------------
http://www.ticmy.com/?p=110