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