int和Integer的区别
1、Integer是int的包类,int是java的基本数据类型
2、Integer变量必须实例化才能使用,但不需要int变量
3、Integer实际上是对对象的引用,new的Integer的情况下实际上生成指向该对象的指针; int直接存储数据值
4、Integer的默认值为空,int的默认值为0
扩展:
关于Integer和int的比较
1.new生成的两个Integer变量不总是相等,因为Integer变量实际上是对一个Integer对象的引用(因为new生成的是两个对象,内存地址不同)。 integerI=newinteger(100;
integerj=newinteger(100;
system.out.print(I==j ); //false
2、比较Integer变量和int变量时,如果两个变量的值各向同性,则结果为true。 (比较包装类Integer和基本数据类型int时,java会自动取消包装并比较int,因此实际上是两个int变量的比较。 ) ) ) )。
int j=100;
system.out.print(I==j );//真
3、将非new生成的Integer变量与new Integer ()生成的变量进行比较,结果为false。 内存中的地址不同(Integeri=new iiii ),因为(非new生成的integer变量指向java常量池中的对象,new Integer ) )生成的变量指向堆中新创建的对象
英特尔j=100;
system.out.print(I==j ); //false
4、对两个new以外生成的Integer对象进行比较时,如果两个变量的值在区间-128至127之间,则比较结果为true,如果两个变量的值不在该区间中,则比较结果为falseInteger i=100 英特尔j=100;
system.out.print(I==j ); //trueInteger i=128;
英特尔j=128;
system.out.print(I==j ); //false
关于第4条的理由:
如果正在编译Integer i=100,java将被翻译为integerI=integer.valueof(100 )。 另一方面,java API将Integer类型的valueOf定义如下: 公共统计数据转换器(Inti )。
assert IntegerCache.high=127;
if (I=integer cache.lowi=integer cache.high ) }
returnintegercache.cache [ I (-integer cache.low ) ];
}
返回新集成器(I;
}
java缓存-128到127之间的数字,如果Integer i=127,则缓存127;如果写为Integer j=127,则直接从缓存中提取,而不是新的
更多编程学习课程,关注PHP中文网!