Object详解

关于Object

  1. Object类是Java中所有的类默认的父类,所有的类都默认继承Object类印次使用Object来接收所有类的对象。Object obj =new Class();
    Object是最高参数统一化

除了Object是默认所有类的父类外,JDk赋予了Object可以接收所有引用数据类型的权利Object还可以接收数组和接口对象!

int [] arr ={1,2,3,4,5,6};
//1.Object的引用接收数组对象向上转型
Object obj =arr;
int ret =(int [])obj;
System.out.println(Arays.toString(ret));
//2.Object还可以接收接口对象
Ifly fiy =new Duck(name:"鸭子");
//向上转型
Object obj1 = fly; 
//向下转型
IFly fiy1=(IFly) obj1;
fly.fly();

注意
由于向上转型的存在,大家一定要记住千万别被前面的类名给迷惑了,我们重点关注的是NEW在哪!!!!
Object类的默认equals方法
对于引用数据类型来说”==“是比较引用类型保存的地址值是否相等,若要进行对象内部属性值比较是否相等使用equals方法!!(Object类提供的方法)

Person per1=new Person(name:"张三",age:18);
Person per2=new Person(name:"张三",age:18);
//false .==比较的是per1和per2变量报讯的地址值
System.out.println(per1==per2);
public boolen equals(Object obj){
return (this == obj);
}

Object默认的equals方法的效果:当前对象和传入对象obj的地址是否相同当前对象的引用this和传入的obj引用是否指向同一个对象
=> per1 == per2没啥区别!

因此,自定义的类中,想要比较当前类的对象属性,必须覆写equals方法!

equals覆写

public booLean equals(Object obj) {
// 1.base case
if (this == obj) {
//1.当前对象和转入对象obj都指向的是同一个对象
return true;
}
//2.若传入对象为空或传入对象obj压根就不是Person类型的引用
if (obj==nul! || !(obj instanceof Person)) {
return false;
}
//代码若走到这里,是什么情况
//传入对象obj和当前对象this确实是指向的两个不同对象,且obj一定是当前Person的引用
//脱掉外衣,向下转型,将obj还原为Person引用进行具体属性值的比较
Person per = (Person) obj;(向下转型)
//只要是引用数据类型进行的对象相等比较,统一使用equals方法,JDK常用的类已经实现好了
//String,包装类,集合类等等DK帮助大家实现好了equals方法
return this.age == per.age && this.name.equals(per.name);
//调用String类的equals方法

Object类型除了基本数据类型无法处理外,所有引用数据类型都可以通过Object接收这就是包装类的由来

包装类

在这里插入图片描述

  1. 包装类和基本类型的相互转换
    基本类型—>包装类对象,这个过程称之为”装箱“要么通过相应的包装类的构造方法或valueOf(推荐)
    包装类对象---->基本数据类型,这个过程称为”拆箱“调用相应的包装类的XXValue方法实现拆箱
  2. 包装类的装箱和拆箱解决了将基本数据行封装到类之中的问题,这就引入了一个新问题,若要进行基本类型的运算,需要来回装箱和拆箱,代码写起来很麻烦因此,JDK在编译阶段引入了自动拆装箱,我们只管写代码剩下的交给编译器
  3. 什么时候使用包装类,什么时候用基本数据类型?
    对于基本的POJO类(自定义的类),成员变量统一使用包装类,方法中局部变量可以使用基本数据类型
  4. 基本类型和包装类本质上是两个不同的类型,包装类的本质还是类,对于类来说,默认值为NUll基本类型的默认值就是各个数据类型的默认值
  5. 包装类仍然是对象,要比较属性值是否相等,用equals方法
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值