这是由于java常量池技术: 为了方便快捷地创建某些对象,当需要一个对象时,先从常量池中查找,如果池中没有则创建,有则从池中取,在需要重复创建变量时节省了很多时间。
Byte,Short,Integer,Long,Character这5种整型的包装类,只是在对应值小于等于127时才使用常量池,大于127则不,“==”是比较对象的引用(地址),而不是值(基本数据类型的==比较,则是值)。上面代码 Integer a、b是100时,a、b都指向常量池的同一地方,就是说a、b保存的地址值一样,所以为true; a、b是156时,>127 java不使用常量池技术,a、b保存的地址值不一样,故为false。
PS:要比较对象的值(内容),应用equals。如 Integer a = new Integer(100) a的值不会保存在常量池。 |