Object类
先开心一下哦,有个好心情......
开心一笑
刚刚看到楼下有对情侣在互送巧克力
·
·
·
·
·
·
·
·
·
·
我哐一桶水下去
听说下雨天和巧克力更配哦
好了,开始了......
提出问题
解决问题
- 奴家不是祸水,所有人都要叫我老爸(Every class has Object as a superclass)
- 可是我爹呢? (Object don't have father)
- 我住在java.lang这个家(java language)
Object()
在源码中,未给出我(Object类)的构造函数定义,但实际上,是存在的。
toString()
该方法返回一个字符串,它的值等于(不信看源码):
getClass().getName() + '@' + Integer.toHexString(hashCode())
eg:
Object obj = new Object();//我能生孩子
System.out.println(obj.toString());//打我,我就吐一个给你
System.out.println(obj);//自动调用toString()
//吐:java.lang.Object@56f0474c
再啰嗦下:
- 传言sun公司开发java的时候为了方便所有类的字符串操作而特意加入的一个方法
- 调用System.out.println()时,会自动调用对象的toString()方法
- 一般子类一般重写toString()方法
- 真啰嗦
equal(Object obj)
判断我们是否相等,调我啊
看看我肚子装的是啥(源码)
public boolean equals(Object obj) {
return (this == obj);
}
继续啰嗦:啦啦啦
- 我(Object 类)的 equals 方法实现对象上差别可能性最大的相等关系;
即,对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,
此方法才返回 true(x == y 具有重点内容值 true)。 (不是我想抄,人家啊译的很好) - “==”判断两个引用是否指向同一个对象
- 举一反三:Object类中的equals()方法等价于==
eg:
Object obj = new Object();//别光看
Object obj2 = new Object();//动手写
Object obj3 = obj;//知道吗?
System.out.println(obj.equals(obj2));//false
System.out.println(obj.equals(obj3));//true
System.out.println(obj.equals(null));//false
hashCode()
返回该对象的哈希码值(整形数值)
public native int hashCode();//Object hashCode方法源码
eg:
Object obj = new Object();
System.out.println(obj.hashCode());//886506736
System.out.println(obj.hashCode());//886506736
System.out.println(obj.hashCode());//886506736
//.....
eg:
Object obj = new Object();
Object obj2 = new Object();
System.out.println(obj.hashCode());//593224478
System.out.println(obj2.hashCode());//1704712372
//哈希值不同:看上面的源码就知道了,超级奶爸hashCode是一个本地方法,返回的对象的地址值
- 同一对象多次调用hashCode()方法时,其返回的哈希码是相同的
- 两个对象是相等的,那么对这两个对象中的每个对象调用 hashCode 方法都必须生成相同的整数结果(API这么写的,我没骗你!)
- 程序猿应该意识到,为不相等的对象生成不同整数结果可以提高哈希表的性能(后续会有专门文章介绍哈希这个鬼东西)
- hashCode()相同的两个对象,不一定相等,换言之,不相等的两个对象,hashCode()返回的哈希码可能相同

美图
个人感悟
- 自信点,悲伤给谁看.
- 用最好的状态去迎接每一天.
- 行动,行动,行动,结果.
