其他分享
首页 > 其他分享> > Object类

Object类

作者:互联网

javaEE-2206-何川 19:42:44

Object

Object:对象,物质,客观

万物皆对象:java中所有的类都会直接或者间接继承Object这个类

getClass();

获取类对象

//程序初始化
private static native void registerNatives();//本地方法
//获取类对象
 public final native Class<?> getClass();

hashCode();

hash值
散列算法(不是java实现的)
同一个对象的返回值一样
不同对象的返回值可能一样(9亿分之1)
重写之后要看没有重写的hashCode值:
System.identityHashCode(s1)

//hash值
public native int hashCode();
用处:以后我们的集合都是使用hashcode值来代表对象---对象的代表--地址值
//对象地址的映射
如果对象一样,hash值一定一样
如果对象不一样,hash值一般情况是不一样的,极特殊情况可能一样。

    //散列--31是为了让这个数据更散,不容易产生碰撞
    String类的hashcode方法:
    public int hashCode() {
        int h = hash;//private int hash;Default to 0
        if (h == 0 && value.length > 0) {//private final char value[];
            char val[] = value;//"黄药师"
            for (int i = 0; i < value.length; i++) {
                h = 31 * h + val[i];//黄的编码
            }
            hash = h;//缓存的思想,提高效率
        }
        return h;
    }
   //如果学生对象所有的属性一样,则hash值一样:重写
hash碰撞:
    两个不同东西,经过hash算法之后结果一样
  
    //自己重写---alt+shift+s--->hashCode()
public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + age;
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		return result;
}    
重写之后要看没有重写的hashCode值: 
System.identityHashCode(s1)

equals()

字符串比较

public boolean equals(Object obj) {
     return (this == obj);//栈里的引用地址是否相等
}
字符串这个类对equals尽心了重写:
    public boolean equals(Object anObject) {
        if (this == anObject) {//如果地址一样,则值肯定一样
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String)anObject;//向下转型
            int n = value.length;//调用者字符数组
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {//一位一位的比较
                    if (v1[i] != v2[i])
                        return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }
咱们自己也可以重写equals:
public boolean equals(Object obj) {			
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Student other = (Student) obj;
		if (age != other.age)
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}

toString()

属性输出

public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

启示:自己的类写个toString可以方便属性输出

public String toString() {
		return "Student [name=" + name + ", age=" + age + "]";
}

finalize();

protected void finalize() { }
垃圾回收之前调用这个--垃圾被回收之前逃命的机会

clone()

  1. 重写父类的clone方法
  2. 实现Cloneable接口
  3. 调用对象的克隆方法得到一个新对象

标签:hash,name,int,Object,hashCode,return,public
来源: https://www.cnblogs.com/liang5683/p/16452285.html