object



package
hobject; public class Person { String name; int age; public Person(){} public Person(String name,int age){ this.name = name; this.age = age; } //重写toString方法 //根据项目的需求而定 //根据规定,显示格式:Person[name=刘德华,age=50] public String toString(){ return "Person[name="+name+",age="+age+"]"; } }
package hobject;

/*
 * 关于object中的toString方法
 * SUN在Object类中设计toString方法的目的:返回java对象的字符串表示形式
 * 
 * 在现实的开发过程中,object里边的toString方法已经不够用了
 * 因为Object的toString方法实现的结果不满意
 * 
 * Object中的toString方法就是要被重写的
 * 
 * SUN是这样实现toString方法的:
 * 
 *     public String toString(){
 *         return getClass.getName() + "@" + Integer.toHexString(hashCode);
 *     }
 * 
 * Object中的toString方法返回:
 * 类名@java对象的内存地址经过哈希算法得出的int类型值再转换为十六进制
 * 这个输出结果可以等同看作java对象在堆内存的内存地址
 */
public class Test01 {

    //关于Object中的toString方法
    public static void main(String[] args) {

        //创建一个Object类型的对象
        Object o1 = new Object();
        
        //调用toString方法
        String oStr = o1.toString();
        
        System.out.println(oStr); //java.lang.Object@7150bd4d
        
        //创建一个Person类型的对象
        Person p1 = new Person("刘德华",50);
        
        //调用toString方法
        String pStr = p1.toString();
        
        System.out.println(pStr); 
        //hobject.Person@152b6651
        //重写后:Person[name=刘德华,age=50]
        
        
        Person p2 = new Person("啊哈",1);
        System.out.println(p2.toString()); //Person[name=啊哈,age=1]
        
        //print方法后面的括号中如果是一个引用类型,
        //会默认调用引用类型的toString方法
        System.out.println(p2); //Person[name=啊哈,age=1]
    }

}

 

 

package hobject2;

public class Star {

    //身份证号
    int id;
    
    //姓名
    String name;
    
    //构造方法
    public Star(){
        
    }
    
    public Star(int id, String name){
        this.id = id;
        this.name = name;
    }
    
    /*
     * Object中的equals方法比较的是内存地址
     * 在现实的业务逻辑当中,不应该比较内存地址,应该比较内容
     * 所以Object中的equals方法也要重写
     * 根据需求规定重写equals方法
     * 需求规定:如身份证号一致,且名字也一致,则代表是同一个人
     * sl.equals(s2);
     */
    public boolean equals(Object obj){
        
        //如果两个地址完全相同,肯定相同
        if(this == obj) return true;
        
        //括号里面Object没有id这个属性
        //父类型引用指向子类型对象,需要强制类型转换
        if(obj instanceof Star){
            Star s = (Star)obj;
            if(s.id == id && s.name.equals(name)){
                return true;
            }
        }
        
        return false;
    }
}
package hobject2;

/*
 * 关于Object中的equals方法
 * 
 * Object中的equals方法:
 * 
 *         public boolean equals(Object obj){
 *             return(this == obj);
 *         }
 * 
 * c1.equals(o2); o1是this,o2是obj
 * == 两边如果是引用类型,则比较内存地址,
 * 地址相同则是true,反之则false
 * 
 * Object中的equals方法比较的是两个引用的内存地址
 * 
 * Java对象中的equals方法的设计目的:判断两个对象是否一样
 */
public class Test01 {
    
    public static void main(String[] args){

        Object o1 = new Object();
        Object o2 = new Object();
    
        boolean b1 = o1.equals(o2);
    
        System.out.println(b1); //false
        
        Star s1 = new Star(100, "小明");
        Star s2 = new Star(100, "小明");
        Star s3 = new Star(110, "小明");
        
        System.out.println(s1.equals(s2)); //false,重写完就是true
        System.out.println(s2.equals(s3)); //false
    }
}
package hobject2;

/*
 * 关于java语言中如何比较两个字符串是否一致
 * 
 * 在java中比较两个字符串是否一致,不能用"=="
 * 只能调用 String类的equals方法
 */
public class Test02 {

    public static void main(String[] args) {

        String s1 = new String("ABC");
        String s2 = new String("ABC");
        
        System.out.println(s1 == s2); //false
        
        //String已经重写了Object中的equals方法,比较的是内容
        System.out.println(s1.equals(s2)); //true
    }

}

 

 

package ifinalize;
/*
 * 关于Object中的finalize方法
 * 
 *         finalize方法什么时候调用?
 * 
 *             1.finalize方法每个java对象都有
 * 
 *             2.f1nalize方法不需要程序员去调用,由系统自动调用
 * 
 *             3.java对象如果没有更多的引用指向它,则该java对象成为垃圾数据,
 *             等待垃圾回收器的回收,垃圾回收器在回收这个java对象之前会自动调用
 *             该对象的finalize方法
 *         finalize方法是该对象马上就要被回收了,例如:需要释放资源,则可以在该方法中释放
 */
public class finalize {

    public static void main(String[] args) {

        Person p1 = new Person();
        
        p1 = null; //没有引用指向它,等待回收
        
        //程序员只能“建议”垃圾回收器回收垃圾
        System.gc(); //ifinalize.Person@5f186fab马上就要被回收了
    }

}
package ifinalize;

public class Person {

    //重写Object中的finalize方法
    public void finalize() throws Throwable{
        
        System.out.println(this + "马上就要被回收了");
        
        //垃圾回收也不一定会回收,可以让引用指向别的对象
        Person p = this;
    }
}

 

 

package jhashCode;

public class Test01 {

    public static void main(String[] args) {

        //hashCode方法返回的是该对象的哈希码值
        //java对象的内存地址经过哈希算法得出的int类型的数值
        Test01 t = new Test01();
        
        System.out.println(t.hashCode()); //1901116749
    }

}

 

posted @ 2020-08-13 20:24  Lerresino  阅读(169)  评论(0)    收藏  举报