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() 克隆该对象 */