Object

package com.Object;

public class Test01{
    public static void main(String[] args){
        Test01 ts=new Test01();
        ts.textEquals();
        Student s=new Student();
        
        
    }
    public void testGetClass(){
        //Object的getClass()方法返回的是一个该类的class对象,一般使用该class对象的getName方法获取类名
        Student s=new Student();
        System.out.println(s.getClass());
        System.out.println(s.getClass().getName());
        Object o=new Object();
        System.out.println(o.getClass().getName());
        
    }
    public void testHashCode(){
        //HashCode()获取的是Object对象的哈希值。哈希值,其实是对象的地址值的一种经过特殊处理后的形式
        Student s=new Student();
        System.out.println(s.hashCode());
    }
    public void testToString(){
        /*
         * 默认情况下,对象的toString方法返回的是它的类名+@+哈希码的十六进制表示
         * 这种表示一般没有意义,因为地址值我们一般没有作用,所以我们一般将它重写成为输出所有的成员变量
         * 使用myeclipes的source+Generate toString...可以自动生成
         */
        Student s=new Student();
        System.out.println(s.toString());
        //System.out.println(s.getClass().getName());
        //System.out.println("@");
        //System.out.println(s.hashCode());
        //System.out.println(Integer.toHexString(s.hashCode()));
        System.out.println(s.getClass().getName()+"@"+Integer.toHexString(s.hashCode()));
    }
    public void textEquals(){
        /*
         * 常量类型的比较==是对值得比较
         * 引用类型的比较==是对内存地址的比较
         * 默认的hashCode()得到的是内存地址的hashCode,所以默认情况下==的比较相当于hashCode的比较
         * 对象的equals默认是==一样的,这个是通过查看源码发现的。
         * 所以默认情况下==和equals和hashCode比较得到的值是一致的。
         * equals可以重写。 
         * 因为针对内存地址的比较结果不是我们想要的,一般我们需要的是针对成员变量值得比较,所以一般重写
         * 一般重写equals方法往往需要重写hashCode方法。
         * 
         * instanceOf 关键字可以判断前者是不是后者的子元素
         */
        Student s=new Student("林青霞",27);
        Student s1=new Student("林青霞",27);
        System.out.println(s.equals(s1));//重写之后比较的就是值得hashCode了。String对象的equals方法比较的是值
    }
    public void testClone(){
        Student s=new Student("林青霞",28);
        Student s2=s;
        s2.setName("林青霞");
        s2.setAge(30);
        System.out.println(s+"\n"+s2);
        /*
         * clone()方法不是想用就可以用,必须实现Cloneable接口才可以使用这个方法。
         * clone()方法得到的对象是原来对象的复制品,属性的值都相同,地址值不同,也就是开辟了一块新的空间存储了一样的值
         */
    }
}
/*
 类Object
 java.lang.Object
 版本从JDK1.0开始
 类Object是类层次结构的根类。每个类都直接或者间接继承这个类
 
 拥有构造方法:
 Object()
 这里主要讲几个方法:
     getClass() 返回此Object的运行时类
     hashCode() 返回该对象的哈希码值
     toString() 返回该对象的字符串表示
     clone()    克隆该对象
 */

 

posted @ 2016-06-01 13:32  guodaxia  阅读(178)  评论(0编辑  收藏  举报