Java的Object类

Object类

在Java类继承结构中, java.lang.Object类位于顶端
如果定义一个Java类时没有使用extends关键字声明其父类,则其父类默认为java.lang.Object类;
Object类型的引用变量可以指向任何类型对象

get、set方法:获取和修改属性

javabean 规定的属性获取与修改方法get、set

public class Point {
	private int age;
	/**
	 * 年龄设置方法,满足条件返回设置值
	 */
	public void setAge(int age){
		if(age<0||age>100){
			return;
		}
		this.age = age;
	}
	/**
	 * 获取年龄的方法
	 */
	public int getAge(){
		return this.age;
	}
}

快捷生成Alt+shift+S,选中GettersSetters

toString方法:将一个对象转换为一个字符串

Object两个常被重写的方法之一

String toString()

该方法的设计意义是将一个对象转换为一个字符串

Object本身实现的toString方法返回的是对象的“句柄”,即该对象的引用信息(地址)

格式为:类名@地址

public class Demo {
	public static void main(String[] args) {
		Point p = new Point(1,2);
		String str = p.toString();
		System.out.println(str);
	}
}

通常我们使用一个类的toString方法,就应当重写这个方法

(java API提供的类大部分都应经重写了,无需我们重写,所以我们只需要重写自己定义类中的该方法)

返回的字符串没有严格的格式要求

但应当返回这个对象的属性信息,便于通过返回的字符串了解当前对象的属性信息

//Point.java
public class Point {
	private int x;
	private int y;
	
	public Point(int x, int y) {
		this.x = x;
		this.y = y;
	}
	
	public String toString(){
		return "("+x+","+y+")";
	}
}

//Demo.java
public class Demo {
	public static void main(String[] args) {
		Point p = new Point(1,2);
		String str = p.toString();
		System.out.println(str);
	}
}

注意:

System.out.println(Object obj);

该方法就是将给定对象的 toString 方法返回的字符串输出到控制台

重写了toString方法后,直接打印对象将输出重写后toString方法的返回字符串

如上述Point类重写toString方法后

public class Demo {
	public static void main(String[] args) {
		Point p = new Point(1,2);
		System.out.println(p);  //输出(1,2)
	}
}

equals方法:两个对象内容比较

Object两个常被重写的方法之一

boolean equals(Object obj)

该方法用于比较当前对象(this)与参数对象(obj)的内容比较

当前两个对象内容相同时equals方法返回值应相当于true

equals方法在不重写的情况下,Object定义的是使用"=="比较的

//Point.java
public class Point {
	private int x;
	private int y;
	public Point(int x, int y) {
		this.x = x;
		this.y = y;
	}
	//重写equals方法
    public boolean equals(Point p) {
        return (this.x==p.x && this.y==p.y);
    }
}

//Demo.java
public class Demo {
	public static void main(String[] args) {
		Point p1 = new Point(1,2);
		Point p2 = new Point(1,2);
        //不重写时比较的引用对象,返回false
        //重写后比较规定的对象内容,返回true
		System.out.println(p1.equals(p2));
	}
}

(java API提供的类大部分都应经重写了,无需我们重写,所以我们只需要重写自己定义类中的该方法)

euals的判断原则:

  1. 判断的对象是不是null,如果是null,直接返回false;
  2. 比较的两个对象是不是同一个(obj是不是就是this),如果是直接返回true
  3. 判断两个对象是不是属于同一个类

所以上述代码优化为

//Point.java
public class Point {
	private int x;
	private int y;
	public Point(int x, int y) {
		this.x = x;
		this.y = y;
	}
	//重写equals方法
    public boolean equals(Point p) {    	
        if(obj == null){
    		return false;
    	}
    	if(obj == this){
    		return true;
    	}
		if(obj instanceof Point){
    		Point p = (Point)obj;
    		return this.x==p.x&&this.y==p.y;
    	}
		return false;
    }
}

//Demo.java
public class Demo {
	public static void main(String[] args) {
		Point p1 = new Point(1,2);
		Point p2 = new Point(1,2);
        //不重写时比较的引用对象,返回false
        //重写后比较规定的对象内容,返回true
		System.out.println(p1.equals(p2));
	}
}

快捷生成Alt+shift+S,选中hashCode() and equals()
注意,会附加生成一个hashCode()方法

因为在java开发文档上要求我们重写equals()时,也要重写hashCode()
所以我们不要删

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值