LeetCode: 2.java的包装类型

Integer a = 1;
Integer b = 1;
Integer c = 500;
Integer d = 500;
System.out.print(a == b);
System.out.print(c == d);

上述代码返回结果为:true、false

Integer是int的包装类,不属于基基本数据类型,而是一个类。也表示一个整型的数字,不能被算术运算符进行加,乘,减,除等操作,只能用另外的方法进行算术运算或转换成int在进行运算。Integer里会默认缓存[-128,,127]数值的大小,也就是1Byte,当数值在这个范围内时,Integer不会创建新的对象,所以a和b属于同一个对象且值相等,返回true;c和d超出了该范围,会创建c和d两个不同的对象,虽然值相等,也会返回false。在参数传递的时候,传递的是它所表示的对象的一个引用。

Interger的范围时[-128,127],在这个范围内比较大小,相等为true,超过范围为false

例如:
Integer的初始化可以这样

Integer i= new Integer(233);

但有自动装箱和拆箱,所以也可以

Integer i= 233;

因此,使用==对Integer类比较的是其内存地址

而Integer类有预定义区间[-128~127],在该范围内使用的地址是相同的 =》第一个为true
超过该范围时地址不同 =》第二个为false
(如果使用equals方法比较,都是true)

总结

  1. 包装类和基本数据类型在进行“==”比较时,包装类会自动拆箱成基本数据类型,integer(0)会自动拆箱,结果为true
  2. 两个integer在进行“==”比较时,如果值在-128和127之间,结果为true,否则为false
  3. 两个包装类在进行“equals”比较时,首先会用equals方法判断其类型,如果类型相同,再继续比较值,如果值也相同,则结果为true
  4. 基本数据类型如果调用“equals”方法,但是其参数是基本类型,此时此刻,会自动装箱为包装类型
发布了50 篇原创文章 · 获赞 13 · 访问量 2388

猜你喜欢

转载自blog.csdn.net/endless_Y/article/details/105222321
今日推荐