一.
Object类:
类 Object 是类层次结构的根类。每个类都使用 Object 作为超类(父类)。所有对象(包括数组)都实现这个类的方法。
Object中的一些常用方法:
1.public int hashCode()返回该对象的哈希码值
hashCode()----->通过哈希算法(哈希表:hashtable)---->地址值(不是实际意义上的地址值!)
```
package org.wll;
public class ObjectDemo
{
public static void main(String[] args)
{
Student s1 = new Student() ;
System.out.println(s1.hashCode());//1460821906随机生成哈希值
Student s2 = new Student() ;
System.out.println(s2.hashCode());//2045891656s随机生成哈希值
}
}
2.public final Class getClass()
返回此 Object 的运行时类 (Java反射机制中讲!)
Class类中有一个方法:
public String getName()以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称。
package org.wll;
public class ObjectDemo
{
public static void main(String[] args)
{
Student s1 = new Student() ;
Class c1 = s1.getClass() ;
System.out.println("c1:"+c1);//package org.wll.Student
//public String getName():获取当前正在运行的这类的全路径名称!
String name = c1.getName() ;
System.out.println("name:"+name);//package org.wll.Student :全路径名称
//package org.wll.Student
}
}
3.toString()方法
返回该对象的字符串表示(建议所有子类都重写此方法)
Integer类中有一个方法:
public static String toHexString(int i):将一个int类型的数据转换成一个十六进制的字符串表现形式
如果直接输出对象名称,想要显示当前对象的成员变量的值,那么必须重写Object类中的toString()方法
public class ObjectDemo {
public static void main(String[] args) {
//创建一个学生对象
Student s1 = new Student("高圆圆", 27) ;
//直接输出对象名称
System.out.println("s1:"+s1);//org.westos.object_02.Student@7439aca7
public String toString()
System.out.println("toString():"+s1.toString());//org.westos.object_02.Student@7439aca7
System.out.println("--------------------------");*/
/**
* 通过查看toString()源码:
* public String toString() {
return this.getClass().getName() + "@" + Integer.toHexString(this.hashCode());
}
toString()<==> 对象名.getClass().getName() +"@" +Integer.toHexString(对象名.hashCode())
*/
System.out.println(s1.getClass().getName()+"@"+Integer.toHexString(s1.hashCode()));
System.out.println(s1.toString());
//org.westos.object_02.Student@28169674
//org.westos.object_02.Student@28169674
//直接对象名称,想要显示成员变量的值,怎么办?
//重写toString()方法
// System.out.println(s1);
Student s2 = new Student("高圆圆", 27) ;
System.out.println("s2:"+s2);
}
}
测试类
package org.westos.object_02;
//学生类
public class Student extends Object {
//成员变量
private String name;
private int age ;
public Student() {
super();
}
public Student(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;
}
//当前toString()是自己去写的
/* @Override
public String toString() {
return name+"---"+age;
}*/
//alt+shift+s->s
//自动生成即可!
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
}
3.public boolean equals(Object obj)
指示其他某个对象是否与此对象“相等”。
补充:
==和equal()方法的区别
==:比较的是两个对象的地址值是否相同,
equals()方法默认比较的是两个对象的地址值是否相同,如果重写了Object类中的equals()方法,那么默认比较就是两个对象的内容是否相同
使用工具自动生产equals()方法
javascript:Array对象,Number对象,Stri象,valueOf():====>s1.valueOf(s2) ;比较是内容是否相同
public class ObjectDemo {
public static void main(String[] args) {
//创建学生对象
Student s1 = new Student("高圆圆", 27) ;
Student s2 = new Student("高圆圆",27) ;
System.out.println(s1==s2);
System.out.println("------------------");
Student s3 = s1 ;
System.out.println(s1==s3);
System.out.println("-------------------");
System.out.println(s1.equals(s2));//由于重写Object中的equals()方法,所以比较的是对象的内容是否相同!
/**
* equals()方法的源码
* public boolean equals(Object obj) {
return (this == obj);
}
由于Object类中的equals()方法底层是通过"=="来实现的,所以默认比较的是地址值,如果想比较内容是否相同,需要重写equals()方法
* */
}
}
测试类
public class ObjectDemo {
public static void main(String[] args) {
//创建学生对象
Student s1 = new Student("高圆圆", 27) ;
Student s2 = new Student("高圆圆",27) ;
System.out.println(s1==s2);//flase
System.out.println("------------------");
Student s3 = s1 ;
System.out.println(s1==s3);//ture
System.out.println("-------------------");
System.out.println(s1.equals(s2));//由于重写Object中的equals()方法,所以比较的是对象的内容是否相同!
/**
* equals()方法的源码
* public boolean equals(Object obj) {
return (this == obj);
}
由于Object类中的equals()方法底层是通过"=="来实现的,所以默认比较的是地址值,如果想比较内容是否相同,需要重写equals()方法
* */
}
}