还是一步一步来。 Integer x = 400;//其实是相当于 Integer x = new Integer(400);这时候在内存中有一个Integer对象,400 Integer y = x;//这个时候,Integer类型的引用y指向了上面生成的Integer对象400 x++;//x指向了新new出来的Integer对象401 y++;//y指向了新new出来的Integer对象401,虽然都是401,但对象不同了。 System.out.println((x==y)); //自然false
//题外话: //如果不用400,而用1等比较小数,虽然执行了x++;y++;指向的对象还会是同一个Integer对象, //因为在java对这些比较的数提供了缓存,也就是说,Integer x = 1;其实这个x指向的对象Integer对象,早已经存在(为提高效率) //当然啦,2,等都是早就存在的,只是把引用指向了那个对象,所以x==y会得到相等的
------解决方案-------------------- 。。。这不是什么缓存吧,这是Auto_Boxing_Unboxing吧。 Integer a = new Integer(1); Integer b = new Integer(1); System.out.println(a==b); 输出还是false. 但 Integer a = 1; Integer b = 1; System.out.println(a==b); 就是true了。