java中基本int类型以及其包装类的数值⼤⼩⽐较
java中的⾃动拆装箱
基本类型与包装类型在某些操作符的作⽤下, 包装类型调⽤valueOf()⽅法将原始类型值转换成对应的包装类对象的过程, 称之为⾃动装箱; 反之调⽤xxxValue()⽅法将包装类对象转换成原始类型值的过程, 则称之为⾃动拆箱。这种做法使程序员的代码变得更加简洁, 不再需要进⾏显式转换。
第⼀次⽐较
public static void main(String[] args) {
int i1 = 123;
int i2 = 123;
System.out.println(i1==i2); //true;
Integer i3 = new Integer(124);
//将⼀个基本数据类型的值转换为对应的引⽤类型的对象。
Integer i4 = new Integer(124);
System.out.println(i3==i4);//false
}
基本类型的变量,变量直接存储的是“值”,==来进⾏⽐较时,⽐较的就是 “值” 本⾝。new Integer() 会在内存中开辟空间并引⽤,所以i3和i4指向不同的对象。
第⼆次⽐较
public static void main(String[] args) {
int i = new Integer(188);
int a = new Integer(188);
System.out.println(a==i);//true
java valueof}
这⾥,Integer类型被⾃动拆箱,转化为int类型,然后再进⾏⽐较数值⼤⼩。
第三次⽐较
包装类提供了对象的缓存,具体的实现⽅式为在类中预先创建频繁使⽤的包装类对象,当需要使⽤某个包装类的对象时,如果该对象封装的值在缓存的范围内,就返回缓存的对象,否则创建新的对象并返回。
包装类Integer,基本类型int缓存-128~127(默认为127)。
public static void main(String[] args) {
Integer i1 = 123;
Integer i2 = 123;
System.out.println(i1==i2); //true;
Integer i3 = 255;
Integer i4 = 255;
System.out.println(i3==i4); //false;
}
int类型的值在常量池中初始化,只初始化-128~127的范围。所以当值在-128~127中时,是直接从常量池中取值,⽽常量池中的常量是被共享的,Integer类型-128~127数值也会从常量池取值。所以i1和i2指向常量池中的同⼀个对象。
第四次⽐较
public static void main(String[] args) {
Integer i5 = 266;//⾃动封箱
int i6 = 266;
//⾃动拆箱
System.out.println(i5==i6); //true;
}
包装类与基本类型的⽐较,在⽐较的时候会将包装类拆箱成基本类型进⾏⽐较。参考⽂献及引⽤
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论