Java相关知识(二)

Object有哪些公用方法?

1.clone()方法:保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常。
2.getClass()方法:final方法,获得运行时类型。
3.toString()方法:该方法用的比较多,一般子类都有覆盖。
4.finalize()方法:该方法用于在垃圾收集器回收前调用,做一些释放清理资源工作,因为无法确定该方法什么时候调用,所以很少使用。
6.equals()方法:非常重要的一个方法,一般子类都会重写该方法。
7.hashCode():用于哈希查找,可以减少在查找中使用equals()的次数,重写equals()方法一般都要重写hashCode()方法。
8.wait()方法:使当前线程等待该对象的锁(等待锁定池),当前线程必须是该对象的拥有者,wait()方法一直等待,直到调用notify()/notifyAll()方法被唤醒重新回到对象锁定池当中等待接受任务。
9.notify()/notifyAll()方法:该方法唤醒在该对象上等待的某个线程。

epuals()和==的区别?

关于变量之间的比较,可以分为基本类型变量的比较和引用类型之间的比较。

对于基本类型来说,它们存储在jvm的栈当中,因此比较的是变量的内容,也就是比较的是变量的值。
image

对于引用数据类型来说,因为对象的内容存储在jvm的堆中,栈中只是存储对象的引用(地址),无论是==还是equals比较的都是栈中的内容,即对象的引用,也就是比较的是两个对象的地址。但是根据创建对象的方式不同可以部分两种情况:

1.使用表达式创建对象:


image

2.使用new方法创建对象:
image

到这里也许你会有疑问了?
1.为什么表达式创建和new创建,会让==比较产生不同的结果

因为jvm在程序运行的时候会创建一个缓冲池,当使用表达式创建的时候,程序会在缓冲池当中寻找与其相同值的对象,如果找到,就把这个对象的地址赋给当前创建的对象,因此c和d都指向了c的引用,所以这里在使用==的时候返回true。而当用new创建对象的时候,是堆中重新分配内存,因此栈中的引用是不相同的,所以a和b是内容的值相同引用的栈的地址不同,所以a==b返回false.
2.既然equals比较的是引用,那么a.equals(b)为什么返回true。这里是因为integer里。重写的equals方法!


image

创建一个类验证一下:
image

当自定义Value类中没有重写equals方法时,调用equals方法返回结果为false,说明此时比较的并不只是内容。
重写equals方法:
image
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 这样长的旅途,让人心生疲惫。我不由得怀疑,如果未来真的要在外打拼,我是否真的有这个勇气。 从前总觉得自己是独一无二...
    垣歌阅读 1,651评论 0 0
  • 我和她认识第五年了,前两年,一直以乖乖形象出现,对人热情、礼貌,时常再送些小礼物温暖下你的心窝,我也一直把她当小妹...
    比较主义阅读 2,241评论 0 0
  • 昨天中午开车从上海至嘉兴的路上,恼子里回想这些年来和儿子相处的情景,还有儿子对我的忍让与谅解;也有许多的抱怨与无耐...
    为尘阅读 1,950评论 0 2
  • 环境说明 三台机器(centos6.4) host1 192.168.1.201 host2 192.168.1....
    Aaaaaaaaaaayou阅读 4,214评论 0 2