java中Object源码理解

返回是的此object运行时的类,返回的对象是被object锁定的对象,调用这个方法不需要进行强转

public static void main(String[]args){

       @Data
       class Demo{
           private Integer age;
           private String name;
      }
       Demo demo = new Demo();
       Class c = demo.getClass();
  //获取类的名称
       System.out.println("类的名称----"+c.getName());
  //方法的对象 类中的一个方法就是一个对象(可以获取方法的名称,获取方法的参数类型,获取方法的 返回类型)
       Method[]methods = c.getMethods();
       for (int i = 0; i < methods.length; i++) {
           System.out.println("方法的名称------" + methods[i].getName());
           System.out.println("方法的返回类型------" + methods[i].getReturnType());
           Class[] params = methods[i].getParameterTypes();
           for (int j = 0; j < params.length; j++) {
               System.out.println("方法的参数类型------" + params[j]);
          }
      }
  }

 

hashCode()

这个方法返回该对象的哈希码值,支持这个方法主要是为了提升哈希表的性能如(java.util.HashMap),这个方法返回类型为一个Integer类型;同一个对象调用多次这个方法返回的hashCode值一定会相同;如果两个对象调用equals方法比较返回true,那么这个对象的hashCode值一定相等;如果两个对象调用equals方法返回为false那么这个对象的hashCode值一定不相同.

  public static void main(String[] args) {

       @Data
       class Demo {
           private Integer age;
           private String name;
      }
       //hashCode()方法
       Demo d = new Demo();
       d.setName("张三");
       d.setAge(12);
       Demo d1 = new Demo();
       d1.setName("李四");
       d1.setAge(12);
       
       //获取对象的hashCode值
       Integer hashCode = d.hashCode();
       System.out.println("张三的hashCode值为---------" + hashCode);
       
       //两个对象的hashCode值(两个对象不相等)
       System.out.println(d.equals(d1));
       System.out.println(d.hashCode() + "-------------" + d1.hashCode());
       
       //两个对象的hashCode值(两个对象相等)
       d1.setName("张三");
       System.out.println(d.equals(d1));
       System.out.println(d.hashCode() + "-------------" + d1.hashCode());

  }

 

equals

这个方法主要比较其他对象和此对象是否相等,返回类型为布尔型对于非空对象主要有:

(1)如果同一个对象调用equals方法,返回true

(2)如果obj.equals(obj2)返回的是true,那么obj2.equals(obj)也返回true,也称为equals方法的对称性

(3)equals方法的传递性,如果x.equals(y)和y.equals(z)都返回true,那么x.equals(z)也一定返回true

(4)equals方法的一致性,如果x.equals(y)返回true或者false,那么不管多少次调用都应该返回相同的结果

(5)对于任何非空的对象,x.equals(null),都返回false

(6)如果x.equals(y)返回true,只有x和y引用同一个对象,那么x==y返回true

(7)如果两个对象调用equals方法返回true,那么这两个对象的hashCode值一定相同

 

toString

一般我们构建实体的时候重写此方法,如果不进行重写,那么默认返回"getClass().getName() + '@' + Integer.toHexString(hashCode())"

 

notify()

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzzzjf.html