(Java常用类)Object类
生活随笔
收集整理的這篇文章主要介紹了
(Java常用类)Object类
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- Object類
- toString方法
- 方法摘要
- 覆蓋重寫
- 代碼演示
- equals方法
- 方法摘要
- 默認地址比較
- 對象內容比較
- 代碼演示
- Objects類
- 代碼演示
Object類
- 類 Object是類層次結構的根(夫)類。
- 每個類(Person,Student…)都使用Object作為超類(父類)。
- 所有對象(包括數組)都實現這個類的方法
toString方法
方法摘要
- public String toString():返回該對象的字符串表示。
toString方法返回該對象的字符串表示,其實該字符串內容就是對象的類型+@+內存地址值。
由于toString方法返回的結果是內存地址,而在開發(fā)中,經常需要按照對象的屬性得到相應的字符串表現形式,因此也需要重寫它。
覆蓋重寫
如果不希望使用toString方法的默認行為,則可以對它進行覆蓋重寫(快捷鍵:alt+insert)。例如自定義的Person類:
public class Person { private String name;private int age;@Overridepublic String toString() {return "Person{" + "name='" + name + '\'' + ", age=" + age + '}';}}代碼演示
public class Person {private String name;private int age;public Person() {}public Person(String name, int age) {this.name = name;this.age = age;}//alt+insert 快捷鍵重寫toString方法@Overridepublic 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 class Demo01ToString {public static void main(String[] args) {/*Person類默認繼承了Object類,所以可以使用Object類中的toString方法String toString()返回該對象的字符串表示*/Person person = new Person("張三",18);String s = person.toString();//toString默認輸出的是地址System.out.println(s);//com.company.demo01.Person@4554617c | Person{name='張三', age=18}//直接打印對象的名字,其實就是調用對象的toString person=person.toString;System.out.println(person);//com.company.demo01.Person@4554617c | Person{name='張三', age=18}//看一個類是否重寫了toString方法,直接打印這個類的對象即可,如果沒有重寫toString方法,那么打印的是對象的地址值Random random = new Random();System.out.println(random);//java.util.Random@74a14482Scanner scanner = new Scanner(System.in);System.out.println(scanner);//java.util.Scanner[delimiters=\p{javaWhitespace}+][position=0eArrayList<Integer> list = new ArrayList<>();list.add(1);list.add(2);list.add(3);System.out.println(list);//[1, 2, 3]} }equals方法
方法摘要
- public boolean equals(Object obj):指示其他某個對象是否與此對象“相等”。
調用成員方法equals并指定參數為另一個對象,則可以判斷這兩個對象是否是相同的。這里的“相同”有默認和自定義兩種方式。
默認地址比較
如果沒有覆蓋重寫equals方法,那么Object類中默認進行==運算符的對象地址比較,只要不是同一個對象,結果必然為false。
源碼:
對象內容比較
如果希望進行對象的內容比較,即所有或指定的部分成員變量相同就判定兩個對象相同,則可以覆蓋重寫equals方法。例如:
import java.util.Objects;public class Person { private String name;private int age;@Overridepublic boolean equals(Object o) {// 如果對象地址一樣,則認為相同if (this == o)return true;// 如果參數為空,或者類型信息不一樣,則認為不同if (o == null || getClass() != o.getClass())return false;// 轉換為當前類型Person person = (Person) o;// 要求基本類型相等,并且將引用類型交給java.util.Objects類的equals靜態(tài)方法取用結果return age == person.age && Objects.equals(name, person.name);} }代碼演示
import java.util.Objects;public class Person {private String name;private int age;public Person() {}public Person(String name, int age) {this.name = name;this.age = age;}//alt+insert equals() and hashcode() 快捷鍵重寫equals方法//使equals可以比較對象的屬性@Overridepublic boolean equals(Object o) {if (this == o) return true;//getClass() != o.getClass() 使用反射技術,判斷o是否是person類型,等效于 obj instanceof Personif (o == null || getClass() != o.getClass()) return false;Person person = (Person) o;return age == person.age &&//用Objects可以防止空指針異常Objects.equals(name, person.name);}@Overridepublic int hashCode() {return Objects.hash(name, 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 class Demo02Equals {public static void main(String[] args) {Person p1 = new Person("張三", 18);Person p2 = new Person("張三", 18);//比較p1與p2 默認比較地址值,重寫equals后比較屬性內容System.out.println("p1與p2比較結果為"+p1.equals(p2));} }Objects類
在JDK7添加了一個Objects工具類,它提供了一些方法來操作對象,它由一些靜態(tài)的實用方法組成,這些方法是null-save(空指針安全的)或null-tolerant(容忍空指針的),用于計算對象的hashcode、返回對象的字符串表示形式、比較兩個對象。
在比較兩個對象的時候,Object的equals方法容易拋出空指針異常,而Objects類中的equals方法就優(yōu)化了這個問題。方法如下:
- public static boolean equals(Object a, Object b):判斷兩個對象是否相等。
我們可以查看一下源碼,學習一下:
public static boolean equals(Object a, Object b) { return (a == b) || (a != null && a.equals(b)); }代碼演示
public class Demo03Objects {public static void main(String[] args) {String s1 = null;String s2 = "s2";//null是不能調用方法的,否則會出現空指針異常 // boolean b = s1.equals(s2); // System.out.println(b);//使用Objects的equals方法比較,不會出現空指針異常boolean equals = Objects.equals(s1, s2);System.out.println(equals);} }總結
以上是生活随笔為你收集整理的(Java常用类)Object类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (网络编程)TCP实现聊天
- 下一篇: (Java常用类)日期时间类