int n=420;
Integer i = new Integer(n);
List<Integer> l=new ArrayList<Integer>();
l.add(i);
l.add(i);
System.out.println(l.get(0)==l.get(1));
这个输出true
为什么
int n=420;
List<Integer> l=new ArrayList<Integer>();
l.add(n);
l.add(n);
System.out.println(l.get(0)==l.get(1));
输出false
把n换成42又是true
我看网上说和自动拆箱 装箱有光 但是不明白为什么的
谢谢各位
Integer i = new Integer(n);
List<Integer> l=new ArrayList<Integer>();
l.add(i);
l.add(i);
System.out.println(l.get(0)==l.get(1));
这个输出true
为什么
int n=420;
List<Integer> l=new ArrayList<Integer>();
l.add(n);
l.add(n);
System.out.println(l.get(0)==l.get(1));
输出false
把n换成42又是true
我看网上说和自动拆箱 装箱有光 但是不明白为什么的
谢谢各位
解决方案 »
- Spring反转控制 就是对 多态 的封装
- 关于swingX 中的ColumnControlButton实现Jtable的列隐藏和显示的问题?
- 一个数据结构书里面的编程题
- 关于源码的移植问题
- 菜鸟问题...提交数据不成功,请帮忙看看!...在线等
- com.borland.primetime.util.AssertionException:gbk
- 如何对Java控件的X,Y体现在属性框里
- 初学者,一个问题
- could not load the Java virtual machine.program will exit!
- WebLogin51下,中文的配置,请问高手
- 菜鸟求解错误、
- eclipse计算2的64方和计算器计算的不一样
第一段:
int n=420;
Integer i = new Integer(n);
List<Integer> l=new ArrayList<Integer>();
l.add(i);
l.add(i);
// 这里你只 new 一个对象 i ,当然add 是同一个对象。
System.out.println(l.get(0)==l.get(1)); // 如果你改成下面的代码,outPut 就是 false:
int n = 420;
Integer i = new Integer(n);
Integer j = new Integer(n);
List<Integer> l = new ArrayList<Integer>();
l.add(i);
l.add(j);
System.out.println(l.get(0) == l.get(1));第一段: int n=420;
List<Integer> l=new ArrayList<Integer>();
l.add(n);
l.add(n);
System.out.println(l.get(0)==l.get(1));
// ouPut 确实是 false
原因:
这个和常量池有关,你可以看看源代码“Integer 的valueOf 方法,
Java认为 -128~ 127 (byte)的范围是 最常用的,所以 自动装箱的时候(int -> Integer)
的时候会将该范围的整数缓存起来,当再次使用的时候不会生成新的值而是用原来的。
我觉得应该说的很清晰了吧···
“equals()”是比较两个对象的内容
的时候会将该范围的整数缓存起来,当再次使用的时候不会生成新的值而是用原来的。”这句话