7. Java 基础:Object类 和 String类

本文详细介绍了Java中的Object类,包括equals()、getClass()、hashCode()、finalize()、clone()和toString()方法的使用及原理。同时,对String类的基础知识、构造方法、判断与获取功能进行了阐述,强调了String的不可变性及其重要方法的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


一、Object 类

1. 概述

  • Object 类是类层次结构的 根类。每个类都使用 Object 作为超类。每个类,都直接或间接继承 Object
  • 我们所定义类,没有显示继承其他类,所有这些类在java语言中默认继承 Object 类,可以直接调用 Object 的成员方法

2. equals() 方法

  • public boolean equals(Object obj)

  • Object 类的 equals 方法实现,对象上差别可能性最大的相等关系;

  • 即,对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用 同一个对象 时,此方法才返回 true

  • Object 默认 equals 方法比较的是 对象的地址,Object类中的 equals 方法内部使用的就是==比较运算符

  • 但是,在实际开发中,我们通常认为,只要两个对象 内容相同(满足下面两个条件),那么它们就相等。所以经常需要子类 重写 equals 方法

  • 同一个类的对象

  • 成员变量值都相同

  • 常规协定

  • 对于任何非空引用值 x, x.equals(null) 都应返回 false

  • 自反性:对于任何非空引用值 x,x.equals(x)应返回 true

  • 对称性:对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 truex.equals(y) 也应该返回 true

  • 传递性x.equals(y) 返回 truey.equals(z) 返回 truex.equals(z) 也应该返回 true

  • 一致性:如果 x 和 y 引用的对象没有发生变化,反复调用 x.equals(y) 应该返回相同的结果

3. getClass() 方法

  • public final Class getClass()
  • 获取该对象所对应的类的字节码文件对象 , 也是返回该对象的运行时类的java.lang.Class对象
JButton b1 = new JButton("button1");
System.out.println(b1.getClass());
//输出:
class javax.swing.JButton

4. hashCode() 方法

  • public int hashCode()
  • 返回该对象的 哈希码值
  • 两个相等的对象,要求返回相等的 哈希码值
  • static int hashCode(Object a) : 如果 a 为 null 返回 0,否则返回a.hashCode()

5. finalize() 方法

  • 垃圾回收器准备释放内存的时候,会先调用 finalize()
  • 当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。(垃圾回收器的执行时机不确定)
  • 子类可以重写 finalize 方法,以配置系统资源或执行其他清除

初衷:虽然,在jvm中,垃圾回收器,可以帮助我们自动回收垃圾(仅限于java产生的垃圾),但是对于本地方法,所使用的一些特殊的,jvm所管理不了的内存,这些释放特殊内存空间的代码,就放在 finalize

  • 注意:

对象不一定会被回收。
垃圾回收只与内存有关。
垃圾回收和 finalize() 都是靠不住的,只要JVM 还没有快到耗尽内存的地步,它是不会浪费时间进行垃圾回收的

6. clone() 方法

  • protected Object clone()

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

  • 深复制和浅复制

  • 浅复制(浅克隆)

  • 浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。

  • 深复制(深克隆)

  • 深复制把要复制的对象所引用的对象都复制了一遍。

深复制和浅复制

可以自己去网上找一些代码来看下,很好理解

7. toString() 方法

  • 返回该对象的字符串表示。通常,toString 方法会返回一个 以文本方式表示 此对象的字符串。结果应是一个简明但易于读懂的信息表达式。建议所有子类都重写此方法。

Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、标记符“@”和此对象哈希码的无符号十六进制表示组成。
换句话说,该方法返回一个字符串,它的值等于:
getClass().getName() + '@' + Integer.toHexString(hashCode())


二、String 类

1. 概述

  • 字符串是由多个字符组成的一串数据(字符序列)
  • 字符串可以看成是字符数组
  • String 类对象不能被修改

2. 构造方法

public String()
public String(byte[] bytes)
public String(byte[] bytes,int offset,int length)
public String(char[] value)
public String(char[] value,int offset,int count)
public String(String original)

3. String类的判断功能

boolean equals(Object obj)    //两个字符串的内容是否相同
boolean equalsIgnoreCase(String str)   //两个字符串的是否相同的比较、(忽略字符串的大小写)
boolean contains(String str)  // 判断当前字符串中,是否包含指定字符
boolean startsWith(String str)   //判断当前字符串,是否是由指定字符串开头
boolean endsWith(String str)   //判断当前字符串,是否是由指定字符串结尾
boolean isEmpty()   //判断一个字符串是否是空串

4. String类的获取功能

int length()    //获取当前字符串中的字符序列中,所包含的字符个数
char charAt(int index)     //获取字符串中指定位置的字符
int indexOf(int ch)  //返回指定字符,在字符数组位置

//查找指定字符串,在当前字符串中的位置
// 返回结果是指: 指定字符串中的第一个字符
// 在当前字符串中的位置(只匹配首次出现的单词)
// 如果返回-1,说明再这个字符串中没有与之匹配的
int indexOf(String str)

//从当前字符串指定位置fromIndex往后查找指定的字符ch或者字符串str
int indexOf(int ch,int fromIndex)
int indexOf(String str,int fromIndex)

//从 start 开始,截取到末尾
String substring(int start)
//从 start 开始,end 结束截取到末尾
String substring(int start,int end)

//比如:
String s = "说大放送发康师傅说卡卡卡啊说是";
String s1 = s.substring(2); // 放送发康师傅说卡卡卡啊说是
System.out.println(s1);
String s2 = s.substring(2, 4); //放送
System.out.println(s2);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值