Object类

Posted mephisto03

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Object类相关的知识,希望对你有一定的参考价值。

Object类

hashCode()方法
  • public int hashCode()
  • 返回该对象的哈希码值,默认情况下,该方法会根据对象的地址来计算
  • 不同对象的,hashCode()一般来说不会相同,但是同一个对象的hashCode()值肯定相同
实例
package com.mephisto.object;

import com.mephisto.bean.Student;

public class DemoHashCode {

    public static void main(String[] args) {
        Object object = new Object();
        int hashCode = object.hashCode();
        System.out.println(hashCode);
        
        Student student = new Student("张三",18);
        Student student2 = new Student("李四",19);
        
        System.out.println(student.hashCode());
        System.out.println(student2.hashCode());
    }

}
输出结果
2018699554
1311053135
118352462
getClass()
  • public final class getClass()

  • 返回此Object的运行时类

  • 可以通过Class类中的一个方法,获取对象的真实类的全名称

    • public String getName()
实例
package com.mephisto.object;

import com.mephisto.bean.Student;

public class DemoGetClass {
    
    public static void main(String[] args) {
        Student student = new Student();
        Class clazz = student.getClass();   // 获取该对象的字节码文件
        String name = clazz.getName();      // 获取名称
        System.out.println(name);
        
    }

}
输出结果
com.mephisto.bean.Student
toString()
  • public String toString()

  • 返回该对象的字符串表示

实例
package com.mephisto.object;

import com.mephisto.bean.Student;

/**
 * 
 * @author Administrator
 *
 */
public class DemoToString {
    /**
     * public String toString() {
     *    // Integer.toHexString() 返回整数参数的字符串表示形式,作为16位中的无符号整数.
     *    return getClass().getName() + "@" + Integer.toHexString(hashCode());  
     *  }
     * @param args
     * 左边:类名
     * 中间:@
     * 右边:hashCode的十六进制表现形式
     * toString方法的作用:可以更方便的显示属性值
     * getXXX方法是为了获取值,也可以显示复制,或其他操作
     */
    public static void main(String[] args) {
        /* 在Student.class重写toString
         *  @Override
         *  public String toString() {
         *  return "我的姓名: " + name + " 我的年龄: " + age;
         *  }
         */
        Student stu = new Student("张三", 23);
//      String str = stu.toString();
        System.out.println(stu.toString());
        System.out.println(stu);    // 如果之家打印对象的引用,会默认调用toString()方法
    }
}
输出结果
我的姓名: 张三 我的年龄: 23
我的姓名: 张三 我的年龄: 23
equals()
  • 提示其他某个对象是否与该对象相等
  • 默认情况下比较是对象的引用是否相等
  • 由于比较对象的引用没有意义,一般重写该方法
实例
package com.mephisto.object;

import com.mephisto.bean.Student;

/**
 * 
 * @author Administrator
 *
 */
public class DemoEquals {
    /**
     * public boolean equals(Object obj) {
     *      return (this == obj);
     * }
     * 
     * Obeject中的equals方法比较对象的地址值,没什么意义,需要重写
     * 通常比较对象中的属性值, 认为相同属性是一个对象
     * 
     * 重写Student.class equals方法
     * 
     *  @Override
     *  public boolean equals(Object obj) {
     *      Student student = (Student)obj;   // 向下转型  
     *      return this.name.equals(student.name) && this.age == student.age;
     *  }
     */
        
    public static void main(String[] args) {
        Student student = new Student("张三",23);
        Student student2 = new Student("张三",23);
        /* 比较两个对象是否相等 */
        boolean b = student.equals(student2);
        System.out.println(student == student2);
        System.out.println(b);  // 重写之后比较的是对象的属性值
    }
}
输出结果
false
true
==equals方法的区别
  • ==时一个比较运算运算符,既可以比较基本数据类型,也可以比较引用数据雷响,基本数据类型比较的是值,引用数据类型比较的是地址值

  • equals方法是一个方法, 只能比较引用数据类型,比较的是地址值,底层依赖的是==号所有对象都会继承Object类中的方法,若果没有重写Object类中的equals方法,equals方法和==号比较引用数据类型无区别,但是重写equals方法比较的是对象中的属性

以上是关于Object类的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 快速开发 代码块

Xcode 快速开发 代码块 快捷键

如何通过单击片段内的线性布局从片段类开始新活动?下面是我的代码,但这不起作用

elasticsearch代码片段,及工具类SearchEsUtil.java

拥有的50个CSS代码片段(上)

python使用上下文对代码片段进行计时,非装饰器