重写toString和重写equal
程序员文章站
2022-05-23 21:50:07
...
重写toString和重写equal
package cn.edu.tese;
//总结
//1、如果想要查看对象的属性值 --- 重写toString() ,否则
//用的是object提供的toString()也就是查看对象的地址值
//2、如果要判断,两个对象间的属性值相同,比较完的结果
//返回ture --重写equals(),否则用的Object提供的提供
//的equal()也就是比较了两个对象间的地址值
public class Test_Object {
public static void main(String[] args) {
// TODO Auto-generated method stub
Student s = new Student("jack",10);
//toString():返回该对象的字符串表示
//现在的效果是:[email protected]
//原因是:在打印对象S时,底层会自动调用s.toString(),而且使用的
//是object提高的
System.out.println(s);
//重写toString()后,Student [name=jack, age=10]//equals(),比
//较两个对象是否相等
Student s1 = new Student("jack",10);
//equals()在obj中的实现方式是,this == obj;底层是用来==进行对象间的比较
System.out.println(s1.equals(s));//==比较的是两个对象的地址值,false
}
}
//创建Student类
class Student{
String name;
int age;
//构造方法
public Student() {}
public Student(String name,int age) {
super();
this.name = name;
this.age = age;
}
//我想要的效果是,查看属性是否赋值成功--重写toString()
//右键-source-generate toString()
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
//需求:比较S和S1对象,但是,如果属性都一样,就认为是同一个对象,并让
//equals()返回ture--重写equals()
@Override
public boolean equals(Object obj) {
//判断,如果是学生,就比较,如果连学生都不是,就返回false
if(obj instanceof Student) {//同一个类型的对象的比较
//把obj强转成学生类型,因为我想用学生的特有属性,你不转,
//就只能用Object里的属性,无法使用子类特有属性
Student argStudent = (Student)obj;//向下转型,目的就是使用子类的特殊功能
//判断,如果当前对象this和参数对象argStudent,他们的
//属性完全一样,就返回ture
if(this.name==argStudent.name && this.age==argStudent.age) {
return true;
}
}
return false;
}
}
推荐阅读
-
Java学习总结之方法重载和方法重写
-
详解java中的深拷贝和浅拷贝(clone()方法的重写、使用序列化实现真正的深拷贝)
-
详解C#用new和override来实现抽象类的重写区别
-
【java基础】为什么重写toString()方法?
-
C# Distinct和重写IEqualityComparer时要知道的二三事
-
thinkphp路由规则使用示例详解和伪静态功能实现(apache重写)
-
让Nginx支持ThinkPHP的URL重写和PATHINFO的方法分享
-
关于重写equals()和hashCode()的思考
-
在C#的类或结构中重写ToString方法的用法简介
-
C++重写new和delete,比想像中困难