包装类和自动拆箱、装箱

java是一种面向对象的语言,但是并不是完全面向对象的语言,其保留了八种基本数据类型,基本数据类型总会比对象的运算速度快的多,但是在集合中我们需要传入的是对象而不是基本数据类型所以我们需要将八种基本数据类型包装成相关的类来创建相关的对象。其中int包装类为Integer,其他的数据类型都是首字母大写。

Integer i=new Integer(1);

Integer i2=new Integer("1");

Integer i3=1;

这三种方法都可以创建Integer对象。其中Integer i3=1;为自动装箱编译器在编译的过程中将Integer i3=1;转化为Integer i3=new Integer(1);其他都是jdk源码设计的构造方法。

int i4=new Integer (1);

基本类型无法指定对象,但是对于八种基本类型,编译器将在编译过程中进行自动拆箱,将int i4=new Integer(1)转换成 int i4 =new Integer(1).intvalue();

包装类的对象缓存问题;

Integer i1=new Integer(123);

Integer i2=new Integer(123);

System.out.println(i1==i2);

System.out.println(i1.equals(i2));

很明显对象不同所以输出结果为false和true

Integer i1=130;

Integer i2=130;

System.out.println(s1==s2);

System.out.println(s1.equals(s2));

由于自动装箱问题造成创建的对象依旧是不能相同所以最后输出为false和true

但是!!!!

Integer i1=123;

Integer i2=123;

System.out.println(s1==s2);

System.out.ptinln(s1.equals(s2));

输出结果为true和true!!!

这是因为在java中为了运行速度将【-128-127】的数使用基本类型。这时候就使得两者相同。

猜你喜欢

转载自blog.csdn.net/qq_35681797/article/details/82017164