首页 > 编程知识 正文

int和integer在内存中的区别,int和integer值比较面试题

时间:2023-05-06 12:06:08 阅读:186470 作者:471

目录

int和Integer的基本使用比较

int和Integer的深入比较

int和Integer的基本使用比较Integer是int的包装类; int是基本的数据类型;Integer变量必须实例化才能使用; 不需要int变量。Integer实际上是对对象的引用,并且指向此new的Integer对象。 int应直接存储数据值; Integer的默认值为空; int的默认值为0。 int和Integer的深度比较Integer变量实际上是对一个Integer对象的引用,因此new生成的两个Integer变量始终不相等。 new生成的是两个对象,因为它们的内存地址不同。 integerI=newinteger(100; integerj=newinteger(100; system.out.print(I==j ); //false

比较Integer和int变量时,如果两个变量的值各向同性,则结果为true。 (将包装类Integer与基本数据类型int进行比较时,java会自动解除包装并与int进行比较,因此实际上是两个int变量的比较。 ) integerI=newinteger ) ) 100 int j=100; system.out.print(I==j ); //true

如果将非new生成的Integer变量与new Integer ()生成的变量进行比较,则结果为false。 (非new生成的Integer变量指向java常量池中的对象,而new Integer )生成的变量指向堆中新创建的对象,因此内存中的地址不同(integeri=new iiger ) Integer j=100; system.out.print(I==j ); //false

如果对非new生成的两个Integer对象进行比较,则如果两个变量的值在区间-128到127之间,则比较结果为true;如果这两个变量的值不在区间中,则比较结果为false。 Integer i=100; Integer j=100; system.out.print(I==j ); //trueInteger i=128; Integer j=128; system.out.print(I==j ); //false第4条的理由: java编译Integer i=100时,翻译为integerI=integer.valueof(100 )。 另一方面,java API将Integer类型的valueOf定义如下: 对-128到127之间的数字进行缓存,如果Integer i=127,则缓存127;如果下次写入Integer j=127,则直接从缓存中提取,而不是new。

publicstaticintegervalueof (inti ) { assert IntegerCache.high=127; if (I=integer cache.lowi=integer cache.high (returnintegercache.cache [ I (-integer cache.low ) ] ); }返回新整数(I; () ) ) ) )。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。