Java基础 -- 常见类

Java基础 -- 常见类

1. 字符串相关类

1.1 String类

  • 特性:不能被继承(final修饰);支持序列化(实现Serializable接口);可以比较大小(实现Comparable接口);不可变性(底层:final修饰的char类型)

  • 实例化的两种方式:

    • 字面量:String a ="aaa";
    • new:String a = new String("aaa");

1.2 StringBuffer类

StringBuffer对象代表字符序列可变的字符串

1.3 StringBuilder类

代表可变字符串对象


常见问题:String/StringBuffer/StringBuilder异同

  • 相同点:都代表字符串,底层都是通过char数组实现的

  • 不同点:

    • 可变性:String对象值不可被修改;StringBuffer和StringBuilder对象值可以被修改
    • 线程安全性:StringBuffer线程安全,底层代码中的方法用synchronized修饰;String对象不可变,线程安全;StringBuilder线程不安全
    • 性能:StringBuffer需要同步代码,效率低;StringBuilder效率高;修改String类型每次都会生成一个新的String对象

2. Object类

2.1 Object类是什么?

Object类是所有类的父类

2.2 Object类能干啥?

子类可以用Object的所有方法

2.3 Object常见方法

  • hashCode():返回对象的哈希码
/**
 * native 方法,用于返回对象的哈希码,主要使用在哈希表中,
 比如 JDK 中的HashMap。
 */
public native int hashCode(){
}
  • equals():比较两个对象的内存地址是否相等
public boolean equals(Object obj){
}
/**
 * 用于比较 2 个对象的内存地址是否相等,String 类对该方法进行了重写
 以用于比较字符串的值是否相等。
 */
  • clone():创建并返回当前对象的一份拷贝
/**
 * naitive 方法,用于创建并返回当前对象的一份拷贝。
 */
protected native Object clone() throws CloneNotSupportedException{
}
  • toStirng():返回类的名字实例的哈希码的 16 进制的字符串
/**
 * 返回类的名字实例的哈希码的 16 进制的字符串。
 建议 Object 所有的子类都重写这个方法。
 */
public String toString(){
}

  • notify()/notifyAll():唤醒线程,不可重写(final修饰)
/**
 * native 方法,并且不能重写。唤醒一个在此对象监视器上等待的
 线程(监视器相当于就是锁的概念)。如果有多个线程在等待只会任意唤醒一个。
 */
public final native void notify(){
}

/**
 * native 方法,并且不能重写。跟 notify 一样,唯一的区别就是会唤醒
 在此对象监视器上等待的所有线程,而不是一个线程。
 */
public final native void notifyAll(){
}

  • wait():暂停线程的运行,不能重写(final修饰)
/**
 * native方法,并且不能重写。暂停线程的执行。
 注意:sleep 方法没有释放锁,而 wait 方法释放了锁 ,
 timeout 是等待时间。
 */
public final native void wait(long timeout) throws InterruptedException{
}

/**
 * 多了 nanos 参数,这个参数表示额外时间(以毫微秒为单位,
 范围是 0-999999)。 所以超时的时间还需要加上 nanos 毫秒。。
 */
public final void wait(long timeout, int nanos) throws InterruptedException{
}

/**
 * 跟之前的2个wait方法一样,只不过该方法一直等待,没有超时时间这个概念
 */
public final void wait() throws InterruptedException{
}

  • finalize():垃圾回收
/**
 * 实例被垃圾回收器回收的时候触发的操作
 */
protected void finalize() throws Throwable {
}

常见问题:== 和equals() 区别

  • ==:基本数据类型比较值;引用数据类型比较对象内存地址

  • equals():Object类的一个方法,用于比较两个对象是否相等;String类中对equals()进行了重写,比较的是两个字符串内容是否相等

常见问题:hashCode()作用是什么?

  • 获取对象的哈希码(int整数),哈希码代表对象在哈希表(Java集合中本质是散列表的类,HashMap, Hashtable, HashSet)中的索引位置

常见问题:为什么重写equals()方法时必须重写hashCode()方法?

  • equals()判断两个对象是否相等,若两个对象相等,那么在哈希表中存储的位置肯定相同,所以需要重写HashCode()方法,确保两个对象哈希码相等;

  • 哈希码相等的两个对象不一定相等,原因是哈希冲突

常见问题:深拷贝,浅拷贝,引用拷贝

常见问题:引用传递,值传递

3. 参考资料

https://www.apiref.com/java11-zh/java.base/java/lang/String.html
https://blog.csdn.net/qq_47183158/article/details/123729517
https://www.cnblogs.com/skywang12345/p/3324958.html
https://www.jianshu.com/p/d6198cfafbc1

posted @ 2022-06-22 14:37  Claire_2099  阅读(23)  评论(0编辑  收藏  举报