Loading...

面试官:String是基础类型吗?Object有哪些通用方法?

阅读 ...

String 到底是不是基础类型?

先给结论:String 绝对不是基础类型,它是引用类型。

Java里的基础数据类型只有8个

  • 数值型:byteshortintlongfloatdouble
  • 字符型:char
  • 布尔型:boolean

除了这8个,剩下的全是引用类型。

它继承于哪一个对象?

在Java的世界里,“万物皆对象”
String 和所有的 Java 类一样,如果没有显式继承其他类,默认直接继承自 java.lang.Object

Object 里面有哪些通用的方法?

Object 类一共有 11 个方法,除去几个私有的,平时最常打交道的有这么几个:

1. equals(Object obj)

指示其他某个对象是否与此对象“相等”。

在 Object 里,默认是用 == 比较,也就是比较两个对象的内存地址

除非你重写它(比如 String 重写了它,改为比较内容),否则两个 new 出来的对象永远不相等。

2. hashCode()

返回对象的哈希码值(一个 int 整数)。

如果你重写了 equals,就必须重写 hashCode

3. toString()

返回对象的字符串表示。

4. getClass()

返回此 Object 的运行时类。

它是反射的参加入场券。

通过这个方法,你可以拿到类的结构信息。

5. clone()

创建并返回此对象的一个副本。

需要注意的是,它是浅拷贝

如果你的类没有实现 Cloneable 接口就调这个方法,会直接抛出 CloneNotSupportedException

6. finalize()

垃圾回收器准备释放内存前调用的钩子方法。

小贴士

千万别用它! 在 JDK 9 之后它已经被标记为过时(Deprecated)了。它执行时机不可控,还会严重影响 GC 性能。

7. wait / notify / notifyAll

这三个是给多线程通信用的。

  • wait():让当前线程释放锁并进入等待状态。
  • notify():随机唤醒一个在该对象监视器上等待的线程。
  • notifyAll():唤醒所有等待的线程。

这三个方法必须在 synchronized 代码块里调用。

总结一下

为了强化记忆,我给整理了一张表格:

方法 作用 备注
equals 比较对象是否相等 默认比地址,业务通常比内容
hashCode 获取哈希码 和 equals 是“连体的”,必须同时重写
toString 对象的字符串描述 方便调试和日志记录
getClass 获取类信息 反射的基石
clone 拷贝对象 注意深浅拷贝的区别
wait/notify 线程间通信 必须配合 synchronized 使用
本文由 iamxurulin 原创发布,转载请保留原文链接。
最后更新于 2026-08-23 17:21:42
关于作者与文章

本文为 iamxurulin 原创技术文章。如对内容有疑问或建议,欢迎在评论区交流讨论。

Coder_Studio - 记录后端开发、算法与 AI 的成长之路