zoukankan      html  css  js  c++  java
  • Javase之object类的概述

    object类的概述

    object类是类层次结构的根类,每个类都使用object作为超类。

    即每个类都直接或间接的继承object类。

    object类中方法介绍

    hashCode

    public int hashCode():返回对象的哈希码值。
    

    ​ 注意:哈希值是根据哈希算法计算出来的一个值,该值与地址值有关,但不是实际的值。可理解为地址值。

    getClass

    public final Class<?> getClass():返回object运行时类,得到一个Class对
    象。返回的 Class 对象是由所表示类的 static synchronized 方法锁定的对象
    。 
    

    在Class类中有getname()方法以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称。

    toString

    public String toString():返回该对象的字符串表示。
    toString方法返回一个字符串,它的值等于: 
    getClass().getName() + '@' + Integer.toHexString(hashCode())
      
    源码:
    public String toString() {
            return getClass().getName() + "@" + 
      	  Integer.toHexString(hashCode());
    }
    

    ps:Integer.toHexString()为Integer类下一静态方法,
    public static String toHexString(int i):以十六进制(基数 16)无符号
    整数形式返回一个整数参数的字符串表示形式。

    toString()方法返回的信息是无意义的。所以建议所以子类重写改方法。

    重写的格式为:把所有成员变量值返回即可。
    但这样不是最好,最好由编译器自动生成即可。

    class Test{
    	int num;
            //此处是自动生成的代码
    	@Override
    	public String toString() {
    		return "Test [num=" + num + "]";
    	}
    }
    class Main{
    	public static void main(String[] args){
      	Test t = new Test();
      	//测试直接输出对象的结果
      	System.out.println(t);
      }
    }
    
    out:
    Test [num=0]
    

    直接输出一个对象的名称,就是调用改对象的toString()方法。

    equals

    public boolean equals(Object obj):指示其他某个对象是否与此对象“相等”。
    Object类中的源码:
    public boolean equals(Object obj) {
            return (this == obj);
        }
    

    通过查看Object类中的equals()源码可知在没有重写equals()的情况下,equals()方法是由"=="实现。

    ==:

    基本类型:比较值是否相等。

    引用类型:比较其地址值是否相等。

    equals()方法,默认情况比较的是地址值,但是比较地址值意义不大,所以要重写改方法。

    在方法重写时,比较对象的成员变量值是否相同

    重写代码优化:提高效率,提高程序健壮性。

    要想做到最好优化还是自动生成。(自动生成时会和hascode()方法一起生成。至于为什么这两个方法需要同时生成在集合中有解释)

    class Test{
    	int num;
    	String sfa;
    
    	@Override
    	public int hashCode() {
    		final int prime = 31;
    		int result = 1;
    		result = prime * result + num;
    		result = prime * result + 	((sfa == null) ? 0 : sfa.hashCode());
    		return result;
    	}
    
    	@Override
    	public boolean equals(Object obj) {
    		if (this == obj)
    			return true;
    		if (obj == null)
    			return false;
    		if (getClass() != obj.getClass())
    			return false;
    		Test other = (Test) obj;
    		if (num != other.num)
    			return false;
    		if (sfa == null) {
    			if (other.sfa != null)
    				return false;
    		} else if (!sfa.equals(other.sfa))
    			return false;
    		return true;
    	}
    }
    

    注:此为eclipse生成可能与idea生成的有所不同,但效果一样。

    finalize

    protected void finalize() throws Throwable :当垃圾回收器确定不存在
    对该对象的更多引用时,由对象的垃圾回收器调用此方法。
    

    clone

     protected Object clone() throws CloneNotSupportedException:创建并
     返回此对象的一个副本。“副本”的准确含义可能依赖于对象的类。
    

    Cloneable:如果一个类想要实现clone()方法,那么此类需要实现了Cloneable接口,以示Object.clone()方法合法的进行对该类的按字段复制。

    Cloneable是一个标记接口,表明实现该接口的类可以实现对象的复制。

  • 相关阅读:
    @Autowired和@Resource注解的注入顺序
    八大排序算法(Java实现)+ 自制动画
    一文秒杀三个经典面试求和问题
    这篇文章,或许对还在上学的你,有一些帮助
    得了,一文把前缀和给扒的干干净净了。
    BF,BM,KMP,就这?
    那个贼贵的比特币到底是什么原理?
    小样?别以为你穿了几个马甲就不认得你是二分法!
    面试前必知必会的二分查找及其变种
    Vue.js 官方示例初探
  • 原文地址:https://www.cnblogs.com/wf614/p/11673852.html
Copyright © 2011-2022 走看看