equals方法
问题: == 和equals的对比
- == :既可以判断基本类型,也可以判断引用类型
- ==:如果判断基本类型,判断值是否相等,int i = 10; double d = 10.0000;
- == :如果判断引用类型,判断的是地址是否相等,即是否是同一个对象
equals方法只能用于引用类型,默认判断地址是否相同,子类一般会重写equals,用于判断内容相等
public boolean equals(Object anObject) {//string 类
if (this == anObject) {//判断是否是同一对象
return true;
}
if (anObject instanceof String) {
String aString = (String)anObject;//向下转型
if (coder() == aString.coder()) {
return isLatin1() ? StringLatin1.equals(value, aString.value)
: StringUTF16.equals(value, aString.value);
}
}
return false;
}
public boolean equals(Object obj) {//Integer 类
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
hashCode方法
hash小结
- 提高具有哈希结构的容器的效率
- 两个引用,如果指向的是同一对象,则哈希值是一样的
- 2反之
- 哈希值是更据地址来的,并不等同于地址
package com.LJX.demo;
public class hashcode {
public static void main(String[] args) {
AA aa1 = new AA();
AA aa2 = new AA();
AA aa3 = aa1;
//返回对应的哈希码值
System.out.println(aa1.hashCode());//1967205423
System.out.println(aa2.hashCode());//42121758
System.out.println(aa3.hashCode());//1967205423
}
}
class AA{}
toString 方法
package com.LJX.demo;
public class hashcode {
public static void main(String[] args) {
Monster monster = new Monster("小猪妖", "巡山");
/*
Object类的toString方法源码
(1)getClass().getName()返回的全类名------即包名加类名
(2) Integer.toHexString(hashCode())返回十六进制的hashcode码值
* public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());}
*
* */
//打印/拼接对象时
//直接输出一个类时会默认打印其对象的toString
System.out.println(monster);
}
}
class Monster{
private String name;
private String job;
public Monster(String name, String job) {
this.name = name;
this.job = job;
}
@Override
public String toString(){
return "Monster{"
+ "name = '" + name +"\'"
+ " job = '" + job + "\'"+" }";
}
}