Object类及其常用方法简介
Object类及其常用方法简介
Object类是一个特殊的类,是所有类的父类,如果一个类没有用extends明确指出继承于某个类,那么它默认继承Object类。
这里主要总结Object类中的三个常用方法:toString()、equals()、hashCode()
/**
* 使用当前类测试Object相关方法
* @author QAIU
*
*/
public class Demo {
public static void main(String[] args) {
Point p = new Point(1, 2);
/*
* System.out.println(Object obj)
* 该方法将给定的对象输出到控制台时,
* 会调用该对象的toString将返回的字符串输出
* 而Object定义的toString返回的字符串
* 格式:类名@地址
* 这对于实际应用中意义不大.
*/
System.out.println(p);
/*
* 任何引用类型和字符串连接结果都是字符串
* 而java运行时实际操作是调用其toString方法
* 将返回的字符串与字符串连接的
*/
String str = "point:" + p;
System.out.println(str);
Point p2 = new Point(1, 2);
/*
* 对于引用类型而言,我们判断相等有两种方式,第一种是"=="
* "=="成为等值判断,是比较两个变量的值是否相等
* 对于引用类型而言,变量存的是地址,所以当"=="为true时
* 说明两个引用指向的是同一个对象
*/
System.out.println(p==p2);//false
/*
* 第二种是"equals"方法
* equals方法是Object定义的方法,
* 设计意图是比较两个引用类型变量指向的对象"内容相等"
* 但是该方法需要重写,因为Object提供的该方法内部使用"=="比较的
* 不重写没有任何意义
*/
System.out.println(p.equals(p2));//true
Integer aInteger;
}
}
class Point {
private int x;
private int y;
/**
* @param x
* @param y
*/
public Point(int x, int y) {
super();
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
/**
* 重写toString方法,该方法经常被我们调用的API使用
* 例如:System.out.println()
* 重写该方法的原则:
* 返回字符串的应当包含当前对象的相关信息
* 具体格式没有要求,可以结合需求而定.
*/
@Override
public String toString() {
return "("+x+","+y+")";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + x;
result = prime * result + y;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Point other = (Point) obj;
if (x != other.x)
return false;
if (y != other.y)
return false;
return true;
}
}
hashcode() 函数 <暂时是做了解,用到再说>
hashcode值是通过哈希函数生成的散列表某些时候可能是一个对象的地址
不同的对象可能会产生相同的hashcode,所以不能通过hashcode直接判断两个对象是否相等,但是可以直接根据hashcode值判断两个对象不等,如果两个对象的hashcode值不等,则必定是两个不同的对象。如果要判断两个对象是否真正相等,必须通过equals方法。
也就是说对于两个对象,如果调用equals方法得到的结果为true,则两个对象的hashcode值必定相等;
如果equals方法得到的结果为false,则两个对象的hashcode值不一定不同;
如果两个对象的hashcode值不等,则equals方法得到的结果必定为false;
如果两个对象的hashcode值相等,则equals方法得到的结果未知。