public String toString();返回该对象的字符串表示
toString方法返回该对象的字符串表示,其实该字符串内容就是
对象的类型+@+内存地址值
由于toString方法返回的结果是内存地址,而在开发中,
经常需要按照对象的属性得到相应的字符串表现形式,因此需要重写
覆盖重写
如果不希望使用toString方法的默认行为,则可以对他进行覆盖重写。
例如下面的例子。
在我们直接使用输出语句输出对象名的时候,其实就是通过该对象调用了其toString()方法。
package demo05;
public class Person {
private String name;
private int age;
// @Override
// public String toString() {
// return "Person [name=" + name + ", age=" + age + "]";
// }
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public Person() {
super();
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
//getClass() != obj.getClass()使用反射技术,判断obj是否是Person类型
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
// @Override
// public boolean equals(Object obj) {
//
// // 增加一个判断,传递的参数obj如果是this本身,直接返回true,提高程序效率
// if (obj == this) {
// return true;
// }
//
// // 增加一个判断,防止类型转换一次ClassCastException
// if (obj == null) {
// return false;
// }
//
// // instanceof前面的对象是否是后面的类,或者其子类、实现类的实例
// // obj是否是Person的
// if (obj instanceof Person) {
// // 使用向下转型将Object转换成Person
// Person p = (Person) obj;
// // 比较两个对象的属性,一个对象是this(per1),一个对象是(obj->per2)
// boolean b = this.name.equals(p.name) && this.age == p.age;
// return b;
// }
// // 不是Person类直接返回False
// return false;
//
// }
}
/*
Person类默认 继承了Object类,所以可以使用Object类的equals方法
boolean equals(Object obj)指示其他某个对象是否与此对象“相等”。
equals方法源码:
public boolean equals(Object obj){
return(this == obj);
}
参数:
Object obj:可以传递任意的对象
== 比较运算符,返回值是一个布尔值 true false
基本数据类型:比较的是值
引用数据类型:比较的是两个对象的地址值
this是谁?那个对象调用的方法,方法中的this就是那个对象;Per1
obj是谁?传递过来的参数Per2
this == obj --> per1 == per2
*/
package demo05;
import java.util.ArrayList;
public class Demo02Equals {
public static void main(String[] args) {
Person per1 = new Person("黄蓉", 19);
Person per2 = new Person("黄蓉", 19);
System.out.println(per1);
System.out.println(per2);
ArrayList<String> list = new ArrayList<String>();
boolean b = per1.equals(per1);
System.out.println(b);
}
}
package demo05;
import java.util.Objects;
public class Demo03Object {
public static void main(String[] args) {
String s1 = null;
String s2 = "aBc";
// boolean b1 = s1.equals(s2);//NullPointerException null是不能调用方法的,就会出现空指针异常
/*
Object类的 equals方法;对两个对象进行比较,防止空指针异常
public static boolean equals(Object a, Object b):判断两个对象是否相等。
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}
*/
boolean b = Objects.equals(s1, s2);//防止空指针异常
System.out.println(b);
}
}