遇到下面这样个题,我仔细查了下,对Integer,new Integer()和int进行了总结
int i=0;
Integer j = new Integer(0);
System.out.println(i==j);//true
System.out.println(j.equals(i));//true
两个new Integer()变量比较,永远是false
Integer i = new Integer(100);
Integer j = new Integer(100);
System.out.print(i == j); //false
用new生成的是两个对象,它们的内存地址不同
Integer变量和new Integer()变量比较,永远是false
Integer i = new Integer(100);
Integer j = 100;
System.out.print(i == j); //false
new Integer()变量指向堆中新建的对像,Integer指向的是常量池中的对象(值再-128~127之间时),二者内存地址不同
两个Integer变量相比,如果值在-128~127之间,为true;否则为false
Integer i = 127;
Integer j = 127;
System.out.print(i == j); //true
Integer i = 128;
Integer j = 128;
System.out.print(i == j); //false
-128~127之间的值存放在java常量池中,超出这个范围就需要用 new 新建对象
int 变量 与 Integer、 new Integer() 比较时,只要两个的值是相等,则为true
Integer i = new Integer(100);
int j = 100;
System.out.print(i == j); //true
包装类Integer和基本数据类型比较时,java会自动拆箱,变成了两个int值比较
注意:
1、Java的8种基本类型(Byte, Short, Integer, Long, Character, Boolean, Float, Double), 除Float和Double以外, 其它六种都实现了常量池, 但是它们只在大于等于-128并且小于等于127时才使用常量池
2、equals方法比较的是值,如果值相等,不论是怎么创建的对象都返回true
3、int类型不管数值大小,都放在常量池,Integer类型在-128~127之间的数在常量池,超出范围在堆中创建对象