一、java中所有的类都直接或间接的继承于Object类,自动的拥有Object类的所有方法. toString方法用于输出一个对象的内容.
package k4;
class Animals {
private String name;
private String type;
public Animals(String name, String type) {
super();
this.name = name;
this.type = type;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
@Override//重写string方法
public String toString() {
return "Animals [name=" + name + ", type=" + type + "]";
}
}
public class Animal{
public static void main(String[] args) {
Animals a1=new Animals("旺财","中华田园犬");
//Animal继承Object类,因此继承了toString方法
//toString方法用于将对象的内容转换为String
//Object类的toString方法将返回对象所属的类以及哈希码
//可以重写toString方法,以获得格式化的对象的内容
String str = a1.toString();
System.out.println(str);
//没有重写tostring方法时,调用tostring方法返回k4.Animals@15db9742
//重写tostring方法后,调用tostring方法返回Animals [name=旺财, type=中华田园犬]
System.out.println(a1);//System.out.println(Object x)内部会自动调用对象的toString方法
}//System.out.println(a1)等价于System.out.println(a1.toString)
}
二、Object类的equals方法用于比较两个对象是否相等. Object类的equals方法是使用==来比较.==比较的是对象的引用是否相等.
可以重写euqals方法来比较对象的属性。
package k4;
class Client{
private int id;
public Client(int id) {
super();
this.id = id;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Override
public int hashCode() {//里面为哈希算法,得到int类型的整数值
final int prime = 31;
int result = 1;
result = prime * result + id;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)//地址是否一样 ,this代表调用equals方法的当前对象,(c1.equals(c2)),this指对象c1
return true;
if (obj == null)//自己能调用方法,不为空,如果传递进来的对象为空,则肯定为false
return false;
getClass方法用于获取对象所属的类
if (getClass() != obj.getClass())//如果对象所属类型都不一样,那肯定为false
return false;
Client other = (Client) obj;//将传进来的对象强制类型转换为Client,并赋值给other
if (id != other.id)//比较id值
return false;
return true;
}
}
public class day082201 {
public static void main(String[] args) {
Client c1=new Client(35);
Client c2=new Client(35);//c1和c2是两个不同的对象,自然地址不一样,但他们的内容是一样的,即id一样
//在对象之间使用==比较的是对象的地址是否相同
System.out.println(c1==c2);
//使用从Object类继承来的equals方法来比较对象是否相等
//Object类的equals方法内部比较的是对象的地址,false
//可以重写euqals方法(重写后比较的是对象的内容)来比较对象的属性,true(没重写为false,比较的还是对象的地址)
System.out.println(c1.equals(c2));//false,true
//如果需要比较两个对象的内容,需要重写equals方法
// Client c3 = null; //在一个null对象上调用方法会导致NullPointerException
//c3.equals(c1);
}
}
hashCode方法 Object类的hashCode方法将返回对象的哈希码,哈希码是一个整数值,这个数值跟对象的内容有直
接关系。 Object类的hashCode方法简单的使用对象的内存地址作为哈希码,但是并不符合hashCode方法的意义。
哈希码是对于对象的属性使用hash算法得到的一个整数值。这个整数值相当于对象的摘要。相同对象的哈希码总是
相同的,不同对象的哈希码也可能相同。
可以重写hashCode方法,以保证hashCode方法的意义。
如果重写了equlas方法,那么也应该重写hashCode方法,从而保证相同的对象的哈希码也相同。 hashCode方法应
用于集合中的数据结构:哈希表。
如果要将对象放入哈希表中,那么必须重写equals和hashCode方法。