看了论坛很多区别int和integer的帖子,我们知道integer是int的包装类有人说Java虚拟机在启动的时候会实例化9个对象池,这9个对象池分别用来存储8种基本类型的包装类对象和String对象
但是请看下面的代码:public class TeatString {
Integer a=20;
Integer b=20;
int c=20;
Integer i1=200;
Integer i2=200;
Integer i3=new Integer(200);
int i4=200;
public void test(){
System.out.println(a==b);
System.out.println(a==c);
System.out.println(i1==i2);
System.out.println(i1==i4);
System.out.println(i3==i4);
}
public static void main(String[] args) {
TeatString t=new TeatString();
t.test(); }}输出:
true
true
false
true
true有资料说integer只能包装了-128到127的数据,大于这个范围就要创建新的对象,
但是如果说integer a 在实例化时是在池,而int c是在栈,前者是对象后者是基本类型,为什么a==c?
如果说integer和int都是当做对象,i1,i3都新生成了对象,i1==i4,i3==i4怎么解释?
但是请看下面的代码:public class TeatString {
Integer a=20;
Integer b=20;
int c=20;
Integer i1=200;
Integer i2=200;
Integer i3=new Integer(200);
int i4=200;
public void test(){
System.out.println(a==b);
System.out.println(a==c);
System.out.println(i1==i2);
System.out.println(i1==i4);
System.out.println(i3==i4);
}
public static void main(String[] args) {
TeatString t=new TeatString();
t.test(); }}输出:
true
true
false
true
true有资料说integer只能包装了-128到127的数据,大于这个范围就要创建新的对象,
但是如果说integer a 在实例化时是在池,而int c是在栈,前者是对象后者是基本类型,为什么a==c?
如果说integer和int都是当做对象,i1,i3都新生成了对象,i1==i4,i3==i4怎么解释?
解决方案 »
- 错误java.lang.NumberFormatException: For input string: ""
- Java 从何学起,大家给点建议,来者有分!
- DOM中节点设置多个属性的问题
- wiki是什么意思
- 这个例子中去声明compareTo()方法干嘛用呢?
- 在JB中如何在Jpanel上画一些表格?请高手指教!
- java中有关包的使用
- 怎樣解快query數據時值為Null的問題??
- 怎样设置可以使窗口初始化时为最大窗口?
- 在下面这段代码中,如果对init方法只加synchronized关键字,则不能达到互斥的目的,还要再加上static关键字才能互斥,为什么?
- 关于计算机的几个专业方向
- JDBC的问题
Integer b = 20;现在的变量 a 和 b , 它们的指向的地址是一样的, 它们比较的也是地址, 所以是相等的. 我的总结是(够小的数,它们存在类似串池的一个容器中,如果在这个容器中能够找的到这个值,将这个地址赋给它,如果找不到,就新放进去一个).如果现在将 a++, 那么 a 的地址就变了, 这一切通过debug可以看的出来用 Integer 和 int 比较的时候, Integer会自动转成int来比值, 这个jdk新特性中的功能