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);
}
}