• Java常用类-Object类


    一、java.lang.Object类

    1.Object类是所有Java类的根父类

    2.如果在类的声明中未使用extends关键字指明其父类,则默认父类为java.lang.Object类

    3.Object类中的功能(属性、方法)就具有通用性。

    • 属性:无

    • 方法:equals() / toString() / getClass() /hashCode() / clone() / finalize()

    • wait() 、 notify()、notifyAll()

      Object类只声明了一个空参的构造器

    二、equals()

    面试题: == 和 equals() 区别

    1. ==

    • 可以使用在基本数据类型变量和引用数据类型变量中

    • 如果比较的是基本数据类型变量:比较两个变量保存的数据是否相等。(不一定类型要相同)

    • 如果比较的是引用数据类型变量:比较两个对象的地址值是否相同.即两个引用是否指向同一个对象实体

    • 补充: == 符号使用时,必须保证符号左右两边的变量类型一致。

    2. equals()

    • 是一个方法,而非运算符
    • 只能适用于引用数据类型
    • Object类中equals()的定义:
    public boolean equals(Object obj) {
            return (this == obj);
      }
    
    

    说明:Object类中定义的equals()和==的作用是相同的:比较两个对象的地址值是否相同.即两个引用是否指向同一个对象实体

    • 像String、Date、File、包装类等都重写了Object类中的equals()方法。重写以后,比较的不是两个引用的地址是否相同,而是比较两个对象的"实体内容"是否相同
    • 通常情况下,我们自定义的类如果使用equals()的话,也通常是比较两个对象的"实体内容"是否相同。那么,我们就需要对Object类中的equals()进行重写,在开发中自动生成即可,和生成的get、set方式一样
    • 重写的原则:比较两个对象的实体内容是否相同.
    public static void main(String[] args) {
    		
    		//基本数据类型
    		int i = 10;
    		int j = 10;
    		double d = 10.0;
    		System.out.println(i == j);//true
    		System.out.println(i == d);//true
    		
    		boolean b = true;
    //		System.out.println(i == b);
    		
    		char c = 10;
    		System.out.println(i == c);//true
    		
    		char c1 = 'A';
    		char c2 = 65;
    		System.out.println(c1 == c2);//true
    		
    		//引用类型:
    		Customer cust1 = new Customer("Tom",21);
    		Customer cust2 = new Customer("Tom",21);
    		System.out.println(cust1 == cust2);//false
    		
    		String str1 = new String("atguigu");
    		String str2 = new String("atguigu");
    		System.out.println(str1 == str2);//false
    		System.out.println("****************************");
    		System.out.println(cust1.equals(cust2));//false--->true
    		System.out.println(str1.equals(str2));//true
    		
    		Date date1 = new Date(32432525324L);
    		Date date2 = new Date(32432525324L);
    		System.out.println(date1.equals(date2));//true
    	}
    

    三、toString()

    • 当我们输出一个对象的引用时,实际上就是调用当前对象的toString()
    • Object类中toString()的定义:
     public String toString() {
            return getClass().getName() + "@" + Integer.toHexString(hashCode());
         }
    
    • 像String、Date、File、包装类等都重写了Object类中的toString()方法。

      使得在调用对象的toString()时,返回"实体内容"信息

    • 自定义类也可以重写toString()方法,当调用此方法时,返回对象的"实体内容"

    • 在开发中自动生成即可

    import java.util.Date;
    public class ToStringTest {
    	public static void main(String[] args) {
    		
    		Customer cust1 = new Customer("Tom",21);
    		System.out.println(cust1.toString());//com.atguigu.java1.Customer@15db9742-->Customer[name = Tom,age = 21]
    		System.out.println(cust1);//com.atguigu.java1.Customer@15db9742-->Customer[name = Tom,age = 21]
    		
    		String str = new String("MM");
    		System.out.println(str);//MM
    		
    		Date date = new Date(4534534534543L);
    		System.out.println(date.toString());//Mon Sep 11 08:55:34 GMT+08:00 2113
    		
    	}
    }
    
    

    四、clone()的使用

    //Object类的clone()的使用
    public class CloneTest {
    	public static void main(String[] args) {
    		Animal a1 = new Animal("花花");
    		try {
    			Animal a2 = (Animal) a1.clone();
    			System.out.println("原始对象:" + a1);
    			a2.setName("毛毛");
    			System.out.println("clone之后的对象:" + a2);
    		} catch (CloneNotSupportedException e) {
    			e.printStackTrace();
    		}
    	}
    }
    
    class Animal implements Cloneable{
    	private String name;
    
    	public Animal() {
    		super();
    	}
    
    	public Animal(String name) {
    		super();
    		this.name = name;
    	}
    
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    	@Override
    	public String toString() {
    		return "Animal [name=" + name + "]";
    	}
    	
    	@Override
    	protected Object clone() throws CloneNotSupportedException {
    		// TODO Auto-generated method stub
    		return super.clone();
    	}
    	
    }
    

    五、Finalize()

    对象在回收之前会调用对象的finalize方法

    public class FinalizeTest {
    	public static void main(String[] args) {
    		Person p = new Person("Peter", 12);
    		System.out.println(p);
    		p = null;//此时对象实体就是垃圾对象,等待被回收。但时间不确定。
    		System.gc();//强制性释放空间
    	}
    }
    
    class Person{
    	private String name;
    	private int age;
    
    	public Person(String name, int age) {
    		super();
    		this.name = name;
    		this.age = age;
    	}
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public int getAge() {
    		return age;
    	}
    	public void setAge(int age) {
    		this.age = age;
    	}
    	//子类重写此方法,可在释放对象前进行某些操作
    	@Override
    	protected void finalize() throws Throwable {
    		System.out.println("对象被释放--->" + this);
    	}
    	@Override
    	public String toString() {
    		return "Person [name=" + name + ", age=" + age + "]";
    	}
    	
    }
    
  • 相关阅读:
    leetcode -- Merge Two Sorted Lists
    leetcode -- Rotate List
    leetcode -- Merge Intervals
    leetcode -- Insert Interval
    Egret入门学习日记 --- 第八篇(书中 2.0~2.6节 内容)
    Egret入门学习日记 --- 第七篇(书中 3.9节 内容)
    Egret入门学习日记 --- 第五篇(书中 3.5节 内容)
    Egret入门学习日记 --- 第四篇(书中 3.1~3.3 内容)
    Egret入门学习日记 --- 第三篇 (书中 3.4 内容)
    Egret入门学习日记 --- 第二篇 (书籍的选择 && 书籍目录 && 书中 3.3 节 内容)
  • 原文地址:https://www.cnblogs.com/mengd/p/13296285.html
Copyright © 2020-2023  润新知