目录
什么是包装类?
为什么提供包装类?
包装类的用法
自动装箱
自动拆箱
包装类特点
Integer和int的区别
如何比较相等(equals和==的区别)
什么是包装类?
包装类其实就是8种基本数据类型对应的引用类型。
为什么提供包装类?
1、Java为了实现一切皆对象,为8种基本类型提供了对应的引用类型。
基本类型的数值不是对象,不能调用对象的toString()、hashCode()、getClass()、equals()等方法。所以Java提供了针对每种基本类型的包装类型。
2、集合和泛型其实也只能支持包装类型,不支持基本数据类型。
包装类的用法
自动装箱
自动装箱:把基本类型用它们对于的引用类型包装起来。
如:
Integer a=5;
这就是自动装箱,自动装箱是编译期底层调用了Integer.valueOf()这个方法。
Integer a=5 👉 Integer a=Integer.valueOf(5);
自动拆箱
自动拆箱:包装类型的变量可以直接赋值给基本数据类型的变量。
拆箱:跟自动装箱的方向相反,将Integer及Double这样的引用类型的对象重新简化为基本类型的数据。
如:
int b=a;// 底层是 int b=a.intValue
编译器底层会调用变量名.intValue()方法返回该Integer对象的int值
注意:自动装箱和拆箱是由编译器来完成的,编译器会在编译期根据语法决定是否进行装箱和拆箱动作。
包装类特点
包装类的变量的默认值可以是null,容错率更高。
Integer和int的区别
1、integer是int的包装类,int是Java的一种基本数据结构
2、integer变量必须实例化后才能使用,int变量不需要
3、integer实际是对象的引用,int是直接存储数据值
4、integer的默认值是null,int的默认值是0
如何比较相等(equals和==的区别)
如何比较相等,首先要明白equals和==的区别。
Equals通常用来比较两个对象的内容是否相等,
==用来比较两个对象的地址是否相等,
Object类中的equals方法定义为判断两个对象的地址是否相等(可以理解成是否是同一个对象),地址相等则认为是对象相等。这也就意味着,我们新建的所有类如果没有复写equals方法,那么判断两个对象是否相等时就等同于“==”,也就是两个对象的地址是否相等。但在我们的实际开发中,通常会认为两个对象的内容相等时,则两个对象相等,equals返回true。对象内容不同,则返回false。
所以可以总结为两种情况:
1、类未复写equals方法,则使用equals方法比较两个对象时,相当于==比较,即两个对象的地址是否相等。地址相等,返回true,地址不相等,返回false。
2、类复写equals方法,比较两个对象时,则走复写之后的判断方式。通常,我们会将equals复写成:当两个对象内容相同时,则equals返回true,内容不同时,返回false。