请问为什么结果如此不同?

streamlong 发布于 2012/07/12 18:01
阅读 170
收藏 0

  Integer a = 200;

  Integer b = 200;

  System.out.println(a == b);  // false    这里为什么是false

  System.out.println(a.equals(b));//true


  Integer c = 100;

  Integer d = 100;

  System.out.println(c == d);// true  这里为什么是true

  System.out.println(c.equals(d));// true

  上述现象,求解释?

  对象类型的比较,==和equals分别比较的是什么?

  附加题:请问如何解决simpleDateFormat非线程安全问题?

 

 

加载中
0
zcfox
zcfox

==比较的是对象的引用,a和b虽然智一样,但是引用的不是同一个对象

c和d可能是因为Integer缓存了-128到127这256个状态的Integer,所以c和d引用的是同一个对象

0
逝水fox
逝水fox

自动装箱本质上使用的Integer的类方法valueOf(int i),这个方法如果在-128~127之间会返回预先生成好的对象。而超出这个返回则等同于new Integer(int i)。

附加题如何解决SimpleDateFormat非线程安全的问题,在单线程环境下使用它即可。如果对象的方法本身不线程安全,要不就是加锁,要不就不要让他同时被多个线程持有。只得这两个方法咯。

0
hunterli
hunterli
可以用FastDateFormat来替代SimpleDateFormat,或者每次都new一个SimpleDateFormat
hunterli
hunterli
回复 @逝水fox : commons.lang里面的
逝水fox
逝水fox
FastDateFormat貌似自带的里面沒这个类吧
0
情天大圣
情天大圣

在Java中的,Integer和int是可以Autoboxing和boxing的。

Integer.valueOf()方法基于减少对象创建次数和节省内存的考虑,缓存了[-128,127]之间的数字。此数字范围内传参则直接返回缓存中的对象。在此之外,直接new出来。

返回顶部
顶部