String方法(toString和equals)
toString方法
定义一个对象类(Person)
代码:(请读者默认忽略重写的equals以及tostring方法)
public class Person {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.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;
}
@Override//继承自object类,覆盖重写此方法。
public String toString() {
return "我叫:"+name+",年龄为:"+age;
}
//equals比较两个地址值没有意义,所以覆盖重写一下。
/* @Override
public boolean equals(Object obj) {
//为了提高效率
*//*1.传递的参数是自己*//*
if (obj==this)
return true;
//2.传递的参数是空
if (obj==null)
return false;
//if语句防止类型转换错误。
if (obj instanceof Person)
{
Person p=(Person)obj;
boolean b=this.name.equals(p.name)&&this.age==p.age;
return b;
}
//向下转型可以调用到子方法。
return false;
}*/
//等效于上面的自定义的equals重写。
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;//使用反射技术,判断o是否是person类 等效于obj instanceof person。getclass()相当于获取类名称,如Getclass()获取当前类的名称。
Person person = (Person) o;
return age == person.age &&
Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
测试tostring的方法类
代码:
public class Demo01toString {
/*看一个类中有没有重写tostring方法直接打印出对象即可,如果打印的是地址值,则没有重写,否则重写了。*/
public static void main(String[] args) {
Person p=new Person("奥特曼",1542);
System.out.println(p);//默认调用tostring方法。是地址值的意思,现在在preson类中覆盖重写此方法。
System.out.println(p.toString());
//Scanner sc=new Scanner(System.in);
//System.out.println(sc);//重写了。
}
}
测试equals方法的类
代码
/*Person类默认继承object类,所以可以使用object类的equals方法。*/
public class Demo02equals {
public static void main(String[] args) {
Person p1=new Person("乔峰",26);
Person p2=new Person("萧峰",26);
Person p3=new Person("乔峰",26);
// Person p4=new Person("萧峰",26);
/*基本数据类型的比较是值的比较
* 引用数据类型是地址的比较。*/
/* public boolean equals(Object obj) {
return (this == obj);
}*/
//谁引用谁就是this,调用的就是参数obj
System.out.println("p1的地址值是:"+p1);
System.out.println("p2的地址值是:"+p2);
System.out.println("没有重写的方法地址值的比较。");
System.out.println(p1.equals(p2));
System.out.println("没有重写的方法两个引用对象含相同的参数的比较");
System.out.println(p1.equals(p3));//已修改
System.out.println("重写equals方法后两个引用对象含相同的参数的比较");
System.out.println(p1.equals(p3));
// System.out.println();
System.out.println(p1.getAge()==p2.getAge());
System.out.println("给p1附上p2的值:");
p1=p2;
System.out.println(p1.equals(p2));
List<String> list=new ArrayList<>();
System.out.println(p1.equals(list));
}
}
注意点方法都在代码中注释清楚!
objects(s1,s2)避免空指针异常
代码:
//引用此方法是因为想避免空指针异常
public class Objectequals {
public static void main(String[] args) {
String s1=null;
String s2="abc";
// boolean b=s1.equals(s2);//NullPointerException 空指针异常
//System.out.println(b);
//改进调用Object比较方法。
boolean b1= Objects.equals(s1,s2);
System.out.println(b1);
}
}