Object类中方法总结:基于Java8
2018-03-14 11:05
405 查看
今天看了下别人的阿里面经,总结了以下问题:
1.Object类有哪些方法?
2. hashcode方法有什么用
3.hashcode和equals的区别,引申到map,扩容的实现,时间复杂度
首先有以下几个方法:
1.hashCode和equale函数用来判断对象是否相同
2.wait(),wait(long),wait(long,int),notify(),notifyAll()
3.toString()和getClass()
4.clone()
5.finalize()用于在垃圾回收
6.registerNatives() 本地注册
1.1 ==基本数据类型:(==),比较的是他们的值。
引用类型(类、接口、数组) :用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。
**** 对象是放在堆中的,栈中存放的是对象的引用(地址)。由此可见'=='是对栈中的值进行比较的。如果要比较堆中对象的内容是否相同,那么就要重写equals方法了。
1.2 equals 默认的equals: public boolean equals(Object obj) {
return (this == obj);
}这是java中默认的equals(obj) 方法,判断是不是同一个对象。
覆盖了的equals方法:
**以下是String的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;
} 判断流程为:
即String中equals方法判断相等的步骤是:
1.若A==B 即是同一个String对象 返回true
2.若对比对象是String类型则继续,否则返回false
3.判断A、B长度是否一样,不一样的话返回false
4。逐个字符比较,若有不相等字符,返回false
重新实现equals()方法需要满足以下5个特性:自反:对称,传递,一致,非空性。
1.3 hashcode() hashCode()方法返回的就是一个数值,从方法的名称上就可以看出,其目的是生成一个hash码。hash码的主要用途就是在对对象进行散列的时候作为key输入,据此很容易推断出,我们需要每个对象的hash码尽可能不同,这样才能保证散列的存取性能。哈希算法也称为散列算法,是将数据依特定算法直接指定到一个地址上。
初学者可以这样理解,hashCode方法实际上返回的就是对象存储的物理地址(实际可能并不是)。
[b] 1.4 hashcode() 和 equals() 的区别[/b] 1、如果两个对象equals,Java运行时环境会认为他们的hashcode一定相等。
2、如果两个对象不equals,他们的hashcode有可能相等。
3、如果两个对象hashcode相等,他们不一定equals。
4、如果两个对象hashcode不相等,他们一定不equals。
在使用的时候要求在synchronize语句中使用
wait()用于让当前线程失去操作权限,当前线程进入等待序列
notify()用于随机通知一个持有对象的锁的线程获取操作权限
notifyAll()用于通知所有持有对象的锁的线程获取操作权限
wait(long) 和wait(long,int)用于设定下一次获取锁的距离当前释放锁的时间间隔
如Object类默认的:public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}getClass()返回一个Class对象。
使用clone方法的几个条件:
1)在派生类中实现Cloneable借口。
2)为了获取对象的一份拷贝,我们可以利用Object类的clone方法。
3)在派生类中覆盖积累的clone方法,声明为public。
4)在派生类的clone方法中,调用super.clone()。
具体:http://www.cnblogs.com/gw811/archive/2012/10/07/2712252.html
1.Object类有哪些方法?
2. hashcode方法有什么用
3.hashcode和equals的区别,引申到map,扩容的实现,时间复杂度
首先有以下几个方法:
1.hashCode和equale函数用来判断对象是否相同
2.wait(),wait(long),wait(long,int),notify(),notifyAll()
3.toString()和getClass()
4.clone()
5.finalize()用于在垃圾回收
6.registerNatives() 本地注册
1.hashCode和equals函数用来判断对象是否相同 (参考:http://blog.csdn.net/hla199106/article/details/46907725)
这里面牵扯到的就比较多了,我们再加一个与“==”的比较。1.1 ==基本数据类型:(==),比较的是他们的值。
引用类型(类、接口、数组) :用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。
**** 对象是放在堆中的,栈中存放的是对象的引用(地址)。由此可见'=='是对栈中的值进行比较的。如果要比较堆中对象的内容是否相同,那么就要重写equals方法了。
1.2 equals 默认的equals: public boolean equals(Object obj) {
return (this == obj);
}这是java中默认的equals(obj) 方法,判断是不是同一个对象。
覆盖了的equals方法:
**以下是String的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;
} 判断流程为:
即String中equals方法判断相等的步骤是:
1.若A==B 即是同一个String对象 返回true
2.若对比对象是String类型则继续,否则返回false
3.判断A、B长度是否一样,不一样的话返回false
4。逐个字符比较,若有不相等字符,返回false
重新实现equals()方法需要满足以下5个特性:自反:对称,传递,一致,非空性。
1.3 hashcode() hashCode()方法返回的就是一个数值,从方法的名称上就可以看出,其目的是生成一个hash码。hash码的主要用途就是在对对象进行散列的时候作为key输入,据此很容易推断出,我们需要每个对象的hash码尽可能不同,这样才能保证散列的存取性能。哈希算法也称为散列算法,是将数据依特定算法直接指定到一个地址上。
初学者可以这样理解,hashCode方法实际上返回的就是对象存储的物理地址(实际可能并不是)。
[b] 1.4 hashcode() 和 equals() 的区别[/b] 1、如果两个对象equals,Java运行时环境会认为他们的hashcode一定相等。
2、如果两个对象不equals,他们的hashcode有可能相等。
3、如果两个对象hashcode相等,他们不一定equals。
4、如果两个对象hashcode不相等,他们一定不equals。
2.wait(),wait(long),wait(long,int),notify(),notifyAll()
这几个函数体现的是Java的多线程机制在使用的时候要求在synchronize语句中使用
wait()用于让当前线程失去操作权限,当前线程进入等待序列
notify()用于随机通知一个持有对象的锁的线程获取操作权限
notifyAll()用于通知所有持有对象的锁的线程获取操作权限
wait(long) 和wait(long,int)用于设定下一次获取锁的距离当前释放锁的时间间隔
3.toString()和getClass()
toString()返回一个String对象,用来标识自己如Object类默认的:public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}getClass()返回一个Class对象。
4.clone()
其实是使用了原型模式,使用clone方法的几个条件:
1)在派生类中实现Cloneable借口。
2)为了获取对象的一份拷贝,我们可以利用Object类的clone方法。
3)在派生类中覆盖积累的clone方法,声明为public。
4)在派生类的clone方法中,调用super.clone()。
具体:http://www.cnblogs.com/gw811/archive/2012/10/07/2712252.html
5.finalize()用于在垃圾回收
6.registerNatives() 本地注册
native修饰的方法表示本地方法(跟系统有关,也可以理解为这个方法不是在java中实现的),据说这个方法在一个名为java.dll的动态库文件中。Object类中第40行(我的是jdk1.8)开始的 static{ registerNatives(); } 表示的是在类被加载时,调用 registerNatives()方法进行一些跟系统有关的方法调用,而这个方法的实现就在java.dll中(里面会根据不同系统来执行不同的底层操作)。相关文章推荐
- Java学习总结(16.07.08)Object类的几个常用方法
- 关于java中Object类的某些方法的总结
- java基础学习总结——Object类的方法
- 基于java中正则操作的方法总结
- 基于java技术的软件开发架构总结
- 基于JAVA平台的框架分析总结
- Ajax - JavaScript之实现私有属性、像C++和Java一样支持基于类的继承方法之例子
- 基于java的网络抓包方法
- Java J2SE / 基础类 中关于 为什么要改写java中Object类的equals方法 的 问题
- 对基于qmail的smtp用户验证的总结和完整安装设置方法
- 基于java技术的软件开发架构总结
- 针对JSON的基于java和js多种操作方法与格式转换方法
- 基于java技术的软件开发架构总结
- 基于java技术的软件开发架构总结
- 基于java技术的软件开发架构总结
- 基于java技术的软件开发架构总结
- 总结java开发web service的方法
- Java Collection框架在Collection的生命周期中需要基于不变字段的equals()和hashCode()方法
- 基于java技术的软件开发架构总结
- 对基于qmail的smtp用户验证的总结和完整安装设置方法