浅谈Object类中常用的方法

Object类

Object是所有类的根类,这里面的方法所有对象都可以用,下面先容几种常用的方法

equals方法

  • boolean equals(Object obj) //比较两个对象是否相等
    用下面这个程序来举例,阐述equals 与==的区别
class Person{
  private int age;
 Person(int age){
this.age = age;
}
}
class Test{
  public static void main(String[] args){
  Person p1 = Person(10);
  Person p2 = Person(10);
 System.out.println(p1 == p2);
 System.out.println(p1.equals(p2));
}
}

我先给出结果:这两个都是false

p1==p2这个是比较两个引用,就是地址,显而易见,这两个引用指向不同的对象,所以为false

许多人认为这两个对象是比较这两个对象的内容,这个方法实际是:对于任何非空引用值x和y,当且仅当x和y引用同一个对象时,此方法才返回true 说白了,这个方法也是比较地址,与==一样。

因为大家发现这个Object中给出的方法没啥用,大家一般需要的是比较两个对象中的内容是否相等(例如大家需要比较两个人的年龄是否相等)所以大家需要覆盖这个equals方法。
代码如下

class Person{
  private int age;
 Person(int age){
this.age = age;
}
public boolean equals(Object obj){            注意覆盖方法里面参数列表不能改,改了就不叫覆盖了。
if(obj instanceof Person){
  Person p  =(Person)obj;
  return this.age == P.age;                   由于多态的弊端需要向下转型,就得需要类型判断,防止抛出异常
    }
    else 
      throw new RuntimeException("类型错误");                         如果传入了不是人的东西,得需要进行类型断 
  }                                                                  返回false不太好,需要排除异常                              

大部分情况下,大家都需要覆盖这个方法(很重要),根据特有的内容来判断对象是否相同

hashcode方法

  • int hashcode() 返回对象的哈希码值
    这个方法在哈希表中应用的广泛
    需要注意的是当equals()方法被override时,hashCode()也要被override。按照一般hashCode()方法的实现来说,相等的对象,它们的哈希码值一定相等。

  • 相等(相同)的对象必须具有相等的哈希码(或者散列码)。

  • 如果两个对象的hashCode相同,它们并不一定相同。

getClass方法

  • Class getClass()返回此对象的运行时类
    运行时类:当前对象所属的字节码文件对象。

首先说一下类是怎么加载到内存的

在Java中万物皆对象,当编译完成后,每个类变成了字节码文件(例如Person.class字节码文件),这个字节码文件保存Class类的对象(Class类是Java中的一个类 class Class{ }),第一次需要这个类的时候,类加载器先检查这个类对象是否被加载过,如果还没加载,就找到这个.class文件,把这个Person.class被加载到内存中,在内存中通过这个Person.class类创建对象

代码展示

Class c1 = p1.getClass();
Class c2 = p2.getClass();
System.out.println(c1 == c2);       true

说明:首先p1,p2都是Person类型,通过这两个对象返回Person.class字节码文件对象(内存中只有一份),同过这一个对象生成很多Person对象,所以相同,c1 c2都是指向Person.class字节码文件对象。所以地址相同返回true.

toString方法

  • String toString()
    Java能把所有的类型编程String类型
class Test{
}
class Main{
public static  void main(String[] args){
Test t  = new Test();
Sop(t);
Sop(t.getClass(),getName+"@"+hashCode());
}
}

所有类建议重写toString()

推荐阅读更多精彩内容

  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 1,393评论 0赞 9
  • 本系列出于AWeiLoveAndroid的分享,在此感谢,再结合自身经验查漏补缺,完善答案。以成系统。 Java基...
    济公大将阅读 713评论 1赞 4
  • 那片枯萎发黄的叶子从树上被风吹落。只见它在地上艰难地翻了几个跟斗,留下清脆的声响,而后便不见了踪影。耳边连风声都没...
    散木的读书和生活阅读 403评论 0赞 5
  • 教育是一首诗 诗的名字叫青春 在躁动不安的灵魂里 有一个年轻的梦 教育是一首诗 诗的名字叫激情 在春风化雨的课堂里...
    茜茜_cb0f阅读 189评论 0赞 1
  • 合伙人创业,不是钱,而是激情! 创业,本就是九死一生。但目前社会上你所能看到的都是九生一死,看到的都是乔布斯、雷布...
    酷聊析曼阅读 116评论 0赞 1