二、Object类(RealFather) - Object类是Java默认提供的类
Java除了Object类,所有类都存在继承关系,默认会继承Object父类,所有类对象都可以通过Object类进行接收。
1.取得对象信息
直接使用对象输出的话,默认输出地址编码。
如果现在输出的是String对象,此时输出的是字符串的内容而不是地址,因为String类覆写了Object类的toString()方法。
System.out.println() 系统输出会默认调用对象的toString()方法。
如果默认给出的toString()方法功能不足(不想输出地址,而是输出本类信息),需要在子类中覆写toString()方法。
2.对象的比较 - equals()
3.接收引用数据类型
Object可以接收所有引用数据类型,包括:类、数组、接口
三、包装类
1.将基本数据类型封装到类中
- 为了让Object可以接收基本数据类型
(1)对象型包装类 - Object的直接子类
Boolean(boolean)、Character(char)
(2)数值型包装类 - Number的直接子类,存在数值转换异常
Byte(byte)、Short(short)、Long(long)、Double(double)、Float(float)、Integer(int)
2.拆箱与装箱
- 基本数据类型与相应包装类的数据处理
装箱:将基本数据类型变为包装类对象,利用每个包装类提供的构造方法实现装箱。
拆箱:将包装类中包装的基本类型值取出,利用Number类提供的xxValue()实现拆箱处理。
//手工装箱
Integer i = new Integer(10);
//手工拆箱
int result1 = i.intValue();
//自动装箱
Integer j = 20;
//自动拆箱
int result2 = j + 10;
阿里编码规范:所有相同类型的包装类对象之间的值比较,全部使用equals()方法比较。
对于Integer var = ?
如果值在 -128~127 之间的对象在Integer常量池产生,会复用已有对象。并且在这个区间内的Integer值可以直接使用==比较判断
除此之外的所有数据都会在堆上产生,并不会复用已有对象。
public class Work{
public static void main(String[] args){
Integer i1 = 20;
Integer i2 = new Integer(20);
Integer i3 = 20;
Integer i4 = 200;
Integer i5 = 200;
System.out.println(i1 == i2);
System.out.println(i1 == i3);
System.out.println(i4 == i5);
}
}
输出结果为:
false
true
false
使用 int 还是 Integer ?
(1)【强制】所有POJO类属性必须使用包装类。POJO是简单Java类,只有基本属性、构造方法和getter、setter。
(2)【强制】RPC方法(远程方法调用)的返回值和参数必须使用包装类。
(3)【推荐】所有的局部变量使用基本类型。
类中的属性用包装类,方法中的局部变量使用基本属性。
3.字符串与基本类型转换
(1)将字符串转为基本类型
调用各个包装类的parseXX(String str)方法
eg:Integer.parseInt(str); Double.parseDouble(str);
(2)基本类型转为字符串
- “”+基本类型
- 使用String类的 valueof(基本类型) 方法,静态方法,此方法不产生垃圾空间(推荐使用)。
eg:str.valueof(10);