学习Java第二十天--Object类之toString()方法和equals()方法

toString方法和equals方法的使用方法

11.2.4 toString()方法

  • public String toString(){}
  • 返回该对象的字符串表示(表现形式);
  • 可以根据程序需求覆盖该方法,如,展示对象各个属性值; ‘
public class TestMethodToString {

	public static void main(String[] args) {
		
		//获取对象的字符串表现形式
		
		Object obj = new Object();
		
		System.out.println(obj.toString());
		
		Fish fish = new Fish();
		Bird bird = new Bird();
		
		System.out.println(fish.toString());
		System.out.println(bird);//打印对象:实质打印的就是该对象的toString方法
		
		
		System.out.println(bird.toString());
		System.out.println(bird.hashCode());
		
		System.out.println("------------------------");
		
		//getClass()获得了对象的真实类型 + @ + 16进制的哈希码
		
		System.out.println(bird.getClass().getName() +"#" );
	}
}
class Fish {}
class Bird {}

输出结果:

java.lang.Object@7852e922
com.qf.Day20.Fish@4e25154f
com.qf.Day20.Bird@70dea4e
com.qf.Day20.Bird@70dea4e
118352462
------------------------
com.qf.Day20.Bird#

可以看到输出一个类就是在输出该类的toString方法返回值,默认的toString()方法的输出接口就是“getClass()获得的对象的真实类型 + @ + 16进制的哈希码”。

  • 当我们覆盖了toString()方法,就可以自定义输出规则:
public class TestMethodToString2 {

	public static void main(String[] args) {
		
		Worker w1 = new Worker();
		
		w1.name = "tom";
		w1.age = 20;
		w1.sex = "男";
		w1.salary = 9000D;
		
		System.out.println(w1);
		System.out.println(w1.toString());
	}

}
class Worker{
	String name;
	int age;
	String sex;
	double salary;
	
	
	//覆盖父类方法
	@Override
	public String toString() {
		return "Worker [name=" + name + ", age=" + age + ", sex=" + sex + ", salary=" + salary + "]";
	}
	
}

输出结果:

Worker [name=tom, age=20, sex=, salary=9000.0]
Worker [name=tom, age=20, sex=, salary=9000.0]

当我们自定义输出规则后,就可以很方便的进行类属性的输出操作。

11.2.5 equals()方法

  • public boolean equals(Object obj){}
  • 默认实现为(this == obj),比较两个对象地址是否相同;
  • 可进行覆盖,比较两个对象的内容是否相同;
public class TestMethodForEquals {

	public static void main(String[] args) {
		
		Student s1 = new Student("tom" , 20 , "male" , 99D);
//		Student s2 = new Student("alex" , 22 , "male" , 100D);
//		Student s3 = new Student("rose" , 19 , "famale" , 98D);
		Student s4 = new Student("tom" , 20 , "male" , 99D);
		
		//System.out.println(s1.equals(s1));
		//System.out.println(s1.equals(s3));
		//System.out.println(s1 == s2);
		//System.out.println("-------------");
		//字符串String类型equals == 结果上不一样,字符串对Object类中的原有方法进行了覆盖,比较内容
		
		System.out.println(s1 == s4);//比较地址(因为地址内容不同,返回false)
		System.out.println(s1.equals(s4));//比较内容(因为内容相同,所以返回true)
		
	}
}
class Student{
	String name;
	int age;
	String sex;
	double score;
	
	
	public Student(String name, int age, String sex, double score) {
		super();
		this.name = name;
		this.age = age;
		this.sex = sex;
		this.score = score;
	}


	@Override
	public String toString() {
		return "Student [name=" + name + ", age=" + age + ", sex=" + sex + ", score=" + score + "]";
	}


	@Override
	public boolean equals(Object obj) {//比较内容
		
		//比较两个对象的地址是否一样
		if(this == obj) {
			return true;
		}
		
		//确认对象不能为null
		if(obj == null) {
			return false;
		}
		
		//确认类型
		if(obj.getClass() != obj.getClass()) {
			return false;
		}
		
		//转型(转型的前提是类型必须是Student)
		Student stu = (Student)obj;
		
		//比较内容
		if(this.name == stu.name && this.age == stu.age && this.sex == stu.sex && this.score == stu.score) {
			return true;
		}else {
			return false;
		}
	}
}
										

输出结果:

false
true

同样,自定义equals方法后,可以灵活的进行类与类进行比较。

发布了34 篇原创文章 · 获赞 7 · 访问量 1292

猜你喜欢

转载自blog.csdn.net/weixin_44257082/article/details/104584340
今日推荐