java之Object类

Object类是类层次结构的根类。
每个类都使用Object作为超类。所有对象(包括数组)都实现这个类的方法。

所有类都是Object类的子类。

1、public String toString()方法:返回该对象的字符串表示。
通常,toString方法会返回一个“以文本方式表示”此对象的字符串。结果应是一个简明且易于读懂的信息表达式。建议所有子类都重写此方法。

示例:

class Demo{
	public static void main(String[] args) {
		Student s = new Student();
		System.out.println(s.toString());//调用toString方法,toString是可以省略的,直接用对象的名称,例如:System.out.println(s);
	}
}

class Student{
	private String name;
	private int sid;
	private int age;
	public Student() {}
	public Student(int sid,String name,int age) {
		this.sid = sid;
		this.name = name;
		this.age = age;
	}
}

输出结果:

Demo.Student@279f2327

重写toString方法:

class Demo{
	public static void main(String[] args) {
		Student s = new Student(1,"飞飞",18);
		System.out.println(s.toString());
	}
}

class Student{
	private String name;
	private int sid;
	private int age;
	public Student() {}
	public Student(int sid,String name,int age) {
		this.sid = sid;
		this.name = name;
		this.age = age;
	}
	//重写Object类中的toString方法,注意,声明要完全一样
	public String toString() {//以后想要输出对象信息的时候,就不用写类似print的方法,直接重写toString方法就可以了
		return "sid="+sid+","+"name="+name+","+"age="+age;
	}
}

输出结果:

sid=1,name=飞飞,age=18

2、public boolean equals(Object obj)
指示其他某个对象是否与此对象“相等”。equals方法在非空对象引用上实现相等关系:
(1)自反性:对于任何非空引用值 x,x.equals(x) 都应返回true。
(2)对称性:对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回true。
(3)传递性:对于任何非空引用值 x,y,和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 应返回true。
(4)一致性:对于任何非空引用值 x 和 y ,多次调用 x.equals(y) 始终返回 true 或始终返回 false,前提是对象上 equals 比较中所用的信息没有被修改。
(5)对于任何非空引用值 x,x.equals(null) 都应返回false。
Object类的 equals 方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true(x == y具有值 true)。

源代码:

public boolean equals(Object obj){
	return (this == obj);
}
//比较的是两个对象的内存地址是否相同

示例1:

class Demo1 {
	public static void main(String[] args) {
		Student s = new Student(1,"飞飞",18);
		System.out.println(s);
		Student s2 = new Student(2,"备备",20);
		boolean b = s.equals(s2);
		System.out.println(b);
	}
}

输出结果:

sid=1,name=飞飞,age=18
false

示例2:

class Demo2 {
	public static void main(String[] args) {
		Student s = new Student(1,"飞飞",18);
		System.out.println(s);
		Student s2 = new Student(1,"飞飞",18);
		boolean b = s.equals(s2);
		System.out.println(b);
	}
}

输出结果:

sid=1,name=飞飞,age=18
false
//虽然值一样,但依然是不同的两个对象

如果要做到认为这两个对象是同一个对象,按下面这种做法是不行的:

class Demo3 {
	public static void main(String[] args) {
		String str1 = new String("备备");
		String str2 = new String("备备");
		System.out.println(str1==str2);
	}
}

输出结果:

false

但是,调用equals方法就行:

class Demo4 {
	public static void main(String[] args) {
		String str1 = new String("备备");
		String str2 = new String("备备");
		System.out.println(str1.equals(str2));
	}
}

输出结果:

true

因为String类重写了equals方法,源代码:

public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
    	String anotherString = (String)anObject;
    	int n = value.length;
    	if(n == anotherString.value.length) {
    		char v1[] = value;
    		char v2[] = anotherString.value;
    		int i = 0;
    		while(n--!=0) {
    			if(v1[i]!=v2[i]) {
    				return false;
    			}
    			i++;
    		}
    		return true;
    	}
    }
    return false;
}

重写equals方法,来实现两个对象的比较

class Demo5{
	public static void main(String[] args) {
		Student s = new Student(1,"飞飞",18);
		Student s2 = new Student(1,"飞飞",18);
		boolean b = s.equals(s2);
		System.out.println(b);
	}
}
class Student{
	private String name;
	private int sid;
	private int age;
	public Student() {}
	public Student(int sid,String name,int age) {
		this.sid = sid;
		this.name = name;
		this.age = age;
	}
	public boolean equals(Object obj) {
	    if (this == obj) {
	        return true;
	    }
	    if (obj instanceof Student) {
	    	Student s = (Student)obj;
	    	if(!this.name.equals(s.name)) {
	    		return false;
	    	}
	    	if(this.sid!=s.sid) {
	    		return false;
	    	}
	    	if(this.age!=s.age) {
	    		return false;
	    	}
	    	return true;
	    }
	    return false;
	}
}

输出结果:

true

3、protected void finalize()throws Throwable
当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。子类重写finalize方法,以配置系统资源或执行其他清除。(一般不重写)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值