常量缓存与integer比较_比较Int和Integer的区别!!!

Int和Integer什么是Int?什么是Integer?什么是包装类?Int和Integer的相同和不同?Int和Interger值进行比较。简述两点的特点Int 是一个基础的数据类型。Java的八大基础类型(boolean、byte 、short、char、int、float、double、long)。Integer是一个是个包装类,是一个对象,是对象使用的时候就需要引用,需要new出来。什...
摘要由CSDN通过智能技术生成

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的对象 只能访问该类中的静态方法或静态成员变量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值