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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧