Java基础之父类:Object

Object 类重写

子类在继承父类方法的基础上,对该方法进行重新定义覆盖原方法的操作叫做重写。

  • toString 以字符串的形式返回该类对象的信息
  • equals 判断两个对象是否相等
  • hashCode 返回对象的散列码

散列码是指将对象在内存中的信息映射为一个数字,包括内存地址、属性值

toString

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

将对象的类型+@+hash值,拼接成一个字符串进行返回

String 本质就是一个 char 数组,如果频繁对 String 进行修改操作,则会造成频繁创建新数组的操作,会造成空间浪费,效率低。

如何解决?通过 StringBuffer 来解决,对 String 的优化,就是为了解决频繁修改字符串的问题

直接预留 16 个位置用来修改

StringBuffer 优化机制

StringBuffer 和 StringBuilder 的区别?

一个线程安全,一个线程不安全

@Override
public StringBuilder append(String str) {
    super.append(str);
    return this;
}
@Override
public synchronized StringBuffer append(String str) {
    toStringCache = null;
    super.append(str);
    return this;
}

线程安全的方法效率低

线程不安全的方法效率高

equals

判断两个对象是否相等

public boolean equals(Object obj) {
    return (this == obj);
}

多态

private Member member;

OrdinaryMember

SuperMember

VIPMemeber

== 比较两个对象的内存地址

user.equals(str)
this:user
obj:str

stringBuffer.equals(new Student())
this:stringBuffer
obj:new Student()
public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = value.length;
        if (n == anotherString.value.length) {
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = 0;
            while (n-- != 0) {
                if (v1[i] != v2[i])
                    return false;
                i++;
            }
            return true;
        }
    }
    return false;
}
public boolean equals(Object o) {
    //自己跟自己比较
    if(this == o) return true;
    //参数为null,类型不一致
    if(o == null || this.getClass() != o.getClass()) return false;
    User user = (User) o;
    return this.id.equals(user.id) && this.name.equals(user.name);
}

hashCode

获取对象的内存散列码

public native int hashCode();

本地方法 native

不是用 Java 语言实现的方法,C/C++ 实现的方法

Java 语言特性不能访问底层资源

hashCode 的作用是判断两个对象是否相等

hashCode 和 equals 的区别?

hashCode 效率高,equals 效率低

如果两个对象的 hashCode 不相等,则这两个对象肯定不是同一个对象

但是如果两个对象的 hashCode 相等,不能确定这两个对象就一定是同一个对象,此时就需要使用 equals 进一步确定

hashCode 和 equals 是结合起来使用的

先用 hashCode 来判断,如果不相等则直接得出结论

如果相等,再用 equals 得出结论

集合框架判断两个对象是否相等

异常

Java 处理错误的机制 叫做异常

1、编译时错误,语法错误

2、运行时错误

Java 中有一组类专门用来描述各种各样的运行时错误,叫做异常类

当程序出现错误的时候,根据具体的错误创建一个对应的异常对象,并且将该异常对象抛出,交给能够接收并处理该异常对象的代码块进行处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值