Object类是所有类的超类,基类
里面有一些很常用的方法,子类可以对其进行重写
实现不同的功能。
其中有equals,hashCode,getClass,toString,finalize,clone,等常用方法。
equals方法:
只能用来进行引用类型的比较,比较的是地址是否相同,即是不是同一个对象。
子类往往对Object类中的方法进行重写,
String类中equals方法用来判断字符串的值是不是一样
Integer类中的equals方法用来判断属性值是否相等。
和==运算符的差别:
==运算符既可以判断基本类型,也可以判断引用类型。
equals运算符只能判断引用类型。
package Object_;
//比较两个引用是否指向同一对象。
public class Equals_ {
public static void main(String[] args){
G g=new G();
G g2=new G();
G g3=g;
System.out.println(g.equals(g2));
System.out.println(g3.equals(g));
String s1="hspyyds";
String s2="hspyyds";
String s3="Javayyds";
System.out.println(s1.equals(s2));
System.out.println(s2.equals(s3));
Integer integer=new Integer(5);
Integer integer1=new Integer(7);
Integer integer2=new Integer(7);
System.out.println(integer.equals(integer1));
System.out.println(integer1.equals(integer2));
System.out.println(3==3.0);
}
}
class G{
}
package Object_;
//比较两个引用是否指向同一对象。
public class Equals_ {
public static void main(String[] args){
G g=new G();
G g2=new G();
G g3=g;
System.out.println(g.equals(g2));
System.out.println(g3.equals(g));
}
}
class G{
}
hashCode 方法原型:
public (native) int hashCode(){
}
作用:
1.该方法用来提高哈希结构容器的效率
2.两个引用,如果指向同一对象,则哈希码值肯定一样
3.两个引用,如果指向不同对象,一般情况认为哈希码值一样,在大范围可能存在冲突一样的。
4.哈希码值是通过对象地址得到的,但不要认为哈希码值就是地址
5.在集合中,如果需要hashCode方法,也会重写该方法。
public class HashCode {
public static void main(String[] args){
X x1=new X();
X x2=new X();
X x3=x1;
System.out.println("x1.hashCode()="+x1.hashCode());
System.out.println("x2.hashCode()="+x2.hashCode());
System.out.println("x3.hashCode()="+x3.hashCode());
}
}
class X{
}
toString方法:
用来返回对象的字符串。
返回一个 全类名+@+对象哈希码值。
子类可以重写该方法 来返回对象属性
该方法常用来返回对象属性,打印对象。
直接输出对象实际上就是默认让对象调用toString()方法
package Object_;
public class ToString {
public static void main(String[] args){
A a=new A("a",10);
A a1=new A("x",20);
A a2=a;
Y y=new Y();
System.out.println(a.toString());
System.out.println(a1.toString());
System.out.println(a2.toString());
System.out.println(a);
System.out.println(y);
System.out.println(y.toString());
}
}
class A{
public String name;
public int age;
public A(String name,int age){
this.name=name;
this.age=age;
}
public void setName(String name){
this.name=name;
}
public void setAge(int age){
this.age=age;
}
public String getName(){
return name;
}
public int getAge(){
return age;
}
public String toString(){
return "name:"+name+"tage:"+age;
}
}
class Y{
}
finalize方法:
protected void finalize()
当垃圾回收期确定不存在该对象的更多引用时,
由对象的垃圾回收器调用此方法
1.当对象被回收时,系统自动调用该对象的finalize方法,子类可以重写该方法
完成一些释放资源的操作。资源:数据库的连接的连接,打开文件的文件。
2.对象什么时候被回收:当某个对象没有任何引用时,JVM就认为该对象是一个垃圾,就会调用垃圾回收来销毁该对象,
在销毁该对象前,先调用finalize方法
3.垃圾回收机制的调用,是由系统调用的,也可以通过System.gc()主动触发垃圾回收机制
public class Finalize {
public static void main(String[] args){
Car car=new Car("奔驰");
car=null;
System.gc();//运行到这句话,程序不会阻塞,即不会等到这句话执行结束再执行下面的语句。
System.out.println("程序退出了");
}
}
class Car{
private String name;
public Car(String name){
this.name=name;
}
@Override
protected void finalize() throws Throwable {
super.finalize();
System.out.println("我们销毁了汽车");
System.out.println("释放了一些资源");
}
}



