ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Object类

2022-07-06 20:06:22  阅读:175  来源: 互联网

标签:hash name int Object hashCode return public


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. 调用对象的克隆方法得到一个新对象
  • 浅复制:
    image

    • 只实现了栈中的复制,引用类型只是复制地址
  • 深复制:
    image

    • 所有引用类型再复制

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有