【JavaSE】Object类方法(equals、toString...)

javaAPI: 标准类库
javaAPI中的Object类: 所有没有显示继承的类的父类(根父类),每个类的继承树关系的顶点就是Object类

1.equals() : 比较两个对象是否相等

比较两个对象的地址值是否相等,就是 ==

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

== 与 equsls()

1. == 即可以比较基本类型,也可以比较引用类型。对于基本类型就是比较值,对于引用类型就是比较地址值。
 
2. equals 的话,它是属于 java.lang.Object类 的方法,如果该方法没有被重写过也是 ==;我们可以看到 String等类的equals方法 是被重写过的,而且 String类 在日常开发中用的比较多,久而久之,形成 equals方法 是比较值的错误观点
 
3. 具体要看自定义类里有没有重写 Object类的equals方法 来判断。
 
4. 通常情况下,重写 equals方法,会比较类中的相应属性是否都相等

equals()方法

equals()是一个方法,所以不能使用在基本数据类型。只能使用在引用类型(类)
String、Date、File、包装类 等,都重写了 Object类方法,重写以后,比较的就不再是两个对象值是否相等,而是两个对象的 “实体内容(属性)” 是否相等

 

2.toString() : 获得当前对象的地址值

获取一个对象的地址值

源码:
public String toString() {
return getClass().getName() + “@” + Integer.toHexString(hashCode());
}
注意:我们所以说的地址是基于 JVM 中的地址,是通过 hashCode 计算出来的地址值,是一个虚拟地址,不是内存地址。
 

String等类的 toString

String、Arrays、Date、File等类重写了 Object类的toString方法,不再是获取(返回)对象的地址值,而是 “实体内容(属性)”

例如:
A a = new A();
String s = new String(“abc”);
 
System.out.println(a) / System.out.println(a.toString);
// test.A@6f2b958e
 
System.out.println(s) / System.out.println(s.toString);
// abc
注意:
System.out.println(对象) 与 System.out.println(对象名.toString)相同

System.out.println(对象) 的实现:
      public void println(Object x) {
            String s = String.valueOf(x);
            if (getClass() == PrintStream.class) {
            writeln(String.valueOf(s));
            } else {
                  synchronized (this) {
                  print(s);
                  newLine();
            }
      }
}

 
print(s) 的最终会调用 String.valueOf(s),它的源码:
public static String valueOf(Object obj) {
      return (obj == null) ? “null” : obj.toString();

}

 

3.clone() : 克隆,复制一个对象

复制对象,复制后的对象改变属性值时不会影响被复制的对象,也就是复制出来的对象是独立的

 

4.finalize() : 垃圾回收之前调用

当垃圾回收器发现没有任何引用指向当前对象时,调用此方法将堆空间里的实体进行回收(在回收之前调用:当前对象调用此方法)
(永远不要调用finalize方法,应该交给垃圾回收机制调用)

程序员可以通过System.gc()或者Runtime.getRuntime()来通知系统进行垃圾回收,会有一些效果,但是系统是否进行垃圾回收依然不确定。

 

5.getclass() : 获得当前对象的所属类

每个对象都所属的类:
A a = new A();
System.out.println(a.getclass()) // class class test.A
String s = new String();
System.out.println(s.getclass()) // class java.lang.String

敬请期待

6.hashCode() :

7.wait() :

8.notify() :

9.notifyAll() :

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

澄忆秋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值