Int和Integer什么是Int?什么是Integer?
什么是包装类?
Int和Integer的相同和不同?
Int和Interger值进行比较。
简述两点的特点
Int 是一个基础的数据类型。Java的八大基础类型(boolean、byte 、short、char、int、float、double、long)。
Integer是一个是个包装类,是一个对象,是对象使用的时候就需要引用,需要new出来。
什么是包装类?
在Java基础数据类型中,不是对象无法获取方法,导致基础类型无法转型、反射等过程,为了弥补这个缺陷,Java就使用了包装类的思想。
包装类就是将基础的数据类型分装的到类中。使基础类型可以转化成一个类的方式。
class IntegerDemo{
private int id;
public intID(int id){
this.id=id;
}
public intIDDemo(){
return this.id;
}
}
Int和Integer的不同类进行初始化时int类的变量初始为0.而Integer的变量则初始化为null.
Integer变量必须实例化后才能使用,而int变量不需要 .
在Int是将值直接存储,Integer对象是生成指针指向此对象。所以Integer new出来的变量如果判断是否相等时,肯定是不同的。他两是对象,比的不是值是内存地址。
Int和Integer比较
我们通过代码比较一下Int和Integer的区别
public class Int_and_IntegerDemo {
public static void main(String[] args) {
System.out.print("Int类型和Int比较++");
int i=1000;int j=1000;
if (i==j){
System.out.println(true);
}else {System.out.println(false);}
System.out.print("对象和Int类型比较++");
Integer integer1 = new Integer(1000);
int i1=1000;
if (i1==integer1){
System.out.println(true);
}else {System.out.println(false);}
System.out.print("new出来的非new出来的比较++");
Integer integer=new Integer(1000);
Integer i2= 1000;
if (integer==i2){
System.out.println(true);
}else {System.out.println(false);}
System.out.print("都属于非new出来的比较++");
Integer integer2=100;
Integer i3= 100;
if (integer2==i3){
System.out.println(true);
}else {System.out.println(false);}
System.out.print("都属于非new出来的比较++");
Integer integer3=1000;
Integer i4= 1000;
if (integer3==i4){
System.out.println(true);
}else {System.out.println(false);}
}
}
Int类型和Int比较++true
对象和Int类型比较++true
new出来的非new出来的比较++false
都属于非new出来的比较++true
都属于非new出来的比较++false我们发现Integer变量和int变量比较时,只要两个变量的值是向等的,则结果为true。 因为包装类Integer和基本数据类型int比较时,java会自动拆包装为int,然后进行比较,实际上就变为两个int变量的比较。
非new生成的Integer变量和new Integer()生成的变量比较时,结果为false。 因为 Integer当变量值在-128~127之间时,非new生成的Integer变量指向的是java常量池中的对象,而new Integer()生成的变量指向堆中新建的对象,两者在内存中的地址不同;
而两个new出来的Interger比较时是不可能相等的,他们两是对象。。。
如果有错误的地方,还请指正。
补充:这里就是一个坑,面试题经常会考这个问题
//第一种情况当i的值处于(-128,127)之间,直接返回Integer缓存数组中相应对象的引用 return IntegerCache.cache[i + (-IntegerCache.low)];
//如果i大于127或小于-128,会重新创建一个Integer实例,并返回。 return new Integer(i);
什么意思呢,就是同样一个值,都是new出来的数,如果大于127或小于-128,它创建出来实例会刷新在栈里面的指针,两个值就不等了,下图中比较的已经不是值了,是在栈中的指针,因为不是同一个对象所以指针也不会相同.
//这时候两个对象就不相等了,因为他们已经不是同一个对象了 Integer a = 200;
Integer b = 200;
if(a==b){
System.out.printIn("true");
}else{
System.out.printIn("false");
}
Integer new和不new有啥区别?*
给类new一个对象,new出来的是实例对象.
没有new就创建的对象是类对象
没new的对象 只能访问该类中的静态方法或静态成员变量