Java(基础)equals、hashCode、toString关键字

package com.day12.object;
/**
 * boolean equals(Object obj)
 * 		判断当前对象的内容是否和参数中的对象相等
 */
public class Point {

	private int x;
	private int y;

	public Point() {
	}

	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;
	}

	public String say() {
		return "x : " + x + ", y : " + y;
	}

	/** 这是从Object类直接继承过来的方法, 烂得很, 不能完成对象内容的比较
	 public boolean equals(Object obj) {
	 return (this == obj);
	 }*/

	@Override // 必须重写equals才能完成对象的内容的比较
	public boolean equals(Object obj) {
		// 在这里重写时, 真正完成对象的内容的比较
		// 比较this对象和obj对象
		if (obj instanceof Point) {
			Point p2 = (Point)obj;
			if (this.x == p2.x && this.y == p2.y) {
				return true;
			}
		}
		return false;
	}

	// public native int hashCode();
	@Override
	public int hashCode() {
		// 特征码要和内容相关
		return Integer.parseInt(x + "" + y);
	}

	/** 这是默认的toString方法, 不好, 根本看不清对象的详细信息
	 public String toString() {
	 return getClass().getName() + "@" + Integer.toHexString(hashCode());
	 }*/

	@Override
	public String toString() {
		return say();
	}
}
package com.day12.object;
/**
 * 	boolean equals(Object obj)
 * 		判断当前对象的内容是否和参数中的对象相等
 *
 * 	如果 obj1.equals(obj2) 为真, 那么 obj2.equals(obj1)也必须为真
 * 	如果 obj1.equals(obj3) 为真, 那么 obj2.equals(obj3)也必须为真
 *
 *  int hashCode()
 * 		可以获取对象的哈希码(散列码或特征码)
 *
 *	如果两个对象的equals为true, 说明两个对象的内容相等, 和内容相关的特征码必须一致
 *	如果两个对象的equals为false, 说明两个对象的内容不等, 必须体现散列性, 散列码必须不一样.
 *
 * 	String toString()
 * 		把对象变成字符串, 字符串内容是对象的详细信息(所有属性值拼接)
 *

 */
public class PointTest {

	public static void main(String[] args) {
		Point p1 = new Point(10, 30);
		Point p2 = new Point(10, 30);

		System.out.println(p1 == p2); // 两个引用判断 == 时比较的是两个引用中的地址值
		System.out.println(p1.equals(p2)); // 判断两个对象的内容是否相等
		System.out.println(p2.equals(p1)); // 判断两个对象的内容是否相等

		System.out.println(p1.hashCode());
		System.out.println(p2.hashCode());

		//p1 = null;
		System.out.println(p1);  // 打印对象时不需要调用toString()
		System.out.println(p1.toString());// 和上面效果一样

		String s = "abc  " + p2; // 字符串和对象拼接时, 也会自动调用它的toString()
		System.out.println(s);
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值