Integer 类和 int 的区别
- Integer 是 int 的包装类,默认值为null,int 是八大基本数据类型之一(byte,char,short,int,long,float,double,boolean),默认值为0;
- Integer 表示的是对象,用一个引用指向这个对象,而int是基本数据类型,直接存储数值。
关于Integer的比较问题:
- Integer与new Integer()不相等,因为内存地址不一样,使用 == 比较都为false。
- 两个都是非new出来的Integer,使用 == 比较,如果数在-128到127之间,则是true,否则为false
- 两个都是new出来的,==比较都为false。若要比较值是否相等,需使用equals方法进行比较。
- int和Integer(无论是否new)比,都为true,因为会把Integer自动拆箱为int再去比。
相关证明代码:
package test;
public class Test {
public static void main(String[] args) {
//new创建的包装类对象,两次new得到的对象引用地址是不同的,不能使用==关键字做大小比较。
//而使用<和>等运算符时,会将运算符两边的对象都转换为基本类型后再做比较。
Integer t1 = new Integer(10);
Integer t2 = new Integer(10);
Integer t3 = new Integer(20);
System.out.println(t1==t2);//false
System.out.println(t1<t3);//true
//使用Integer i = Integer.valueOf(400); 或者Integer i = 400;
//当整数类型在-128~127之间时,如果已经创建了一个相同的整数,使用valueOf或者=(int)创建第二次时,不会使用new关键字,而是用已有的对象。
//所以使用valueOf方法创建两次对象,若对应的数值相同,且数值在-128~127之间时,两个对象都指向同一个地址。
//总之,包装类对象不可使用==符做比较运算,如果要进行比较运算时,最好使用java类库中的compareTo方法。
Integer i = Integer.valueOf(40);
Integer j = Integer.valueOf(40);
Integer i2 = Integer.valueOf(400);
Integer j2 = Integer.valueOf(400);
Integer k = Integer.valueOf(399);
System.out.println(i==j);//true
System.out.println(i2==j2);//false
System.out.println(i2>k);//true
Integer p1 = 40;
Integer p2 = 400;
Integer p3 = new Integer(40);
int num = 40;
System.out.println(i==p1);//true
System.out.println(i==p2);//fasle
System.out.println(i==p3);//false
System.out.println(num==p3);//true
}
}