1. 程式人生 > 實用技巧 >五(十一)、Object 類、Equals方法、toString方法、包裝類、Junit

五(十一)、Object 類、Equals方法、toString方法、包裝類、Junit

java.lang,Object類
1.Object類是所有java類的根父類
2.如果在類的宣告中未使用extends關鍵字指明其父類,則預設父類為 java.lang.Object類
Object中的功能(屬性、方法)就具有通用性;
4.Object類只宣告一個空參構造器

Equals:

面試題: == 和 equals()的區別
一、
==:運算子,可以使用基本資料型別變數和引用資料變數中;
如果比較的是基本資料變數,比較兩個變數報錯的資料是否相等(不一定型別要相同);
如果比較的是引用資料型別變數,比較的是地址值,即兩個引用是否指向同一個物件實體;
equals:

是方法;而非運算子,通過物件來呼叫;
object類中對equals()的定義 與 “==” 作用是相同的;比較兩個物件的地址值是否相同,即啷個引用是否指向同一個實體;
像String ,Date File 包裝類等都重寫了Object類中的equals()方法,重寫以後,比較的不是兩個引用的地址值是否相同,
而是比較兩個物件的“實體內容”。
通常情況下,我們自定義的類如果使用equals()的話,也通常比較兩個物件的“實體內容”是否相同,那麼我們就需要對Object類中的
equals()進行重寫;

以下手動重寫equals方法:

10 class Person1{
11     private String name;
12     private int age;
13     public String getName() {
14         return name;
15     }
16     public void setName(String name) {
17         this.name = name;
18     }
19     public int getAge() {
20         return age;
21     }
22     public
void setAge(int age) { 23 this.age = age; 24 } 25 26 public void eat() { 27 System.out.println("人吃飯。。。。"); 28 study(); 29 } 30 31 public void study() { 32 System.out.println("學習。。。"); 33 } 34 public Person1(String name, int age) { 35 //super(); 36 this(age); 37 this.name = name; 38 //this.age = age; //等同於 this("Tome"); 39 } 40 public Person1() { 41 super(); 42 } 43 public Person1(String name) { 44 this();//呼叫當前的空參構造器 45 //super(); 46 this.name = name; 47 48 } 49 public Person1(int age) { 50 //super(); 51 this.age = age; 52 } 53 // @Override //手寫部分 54 // public boolean equals(Object obj) { 55 // if(this == obj) { 56 // return true; 57 // }else if(obj instanceof Person1) { 58 // Person1 p = (Person1)obj; 59 // if(name.equals(p.name) && age == p.age) { 60 // return true; 61 // }else { 62 // return false; 63 // } 64 // }else { 65 // return false; 66 // } 67 // } 68 @Override 69 public int hashCode() { 70 final int prime = 31; 71 int result = 1; 72 result = primeresult + age; 73 result = primeresult + ((name == null) ? 0 : name.hashCode()); 74 return result; 75 }
//程式碼自動生成的equals
76 @Override 77 public boolean equals(Object obj) { 78 if (this == obj) 79 return true; 80 if (obj == null) 81 return false; 82 if (getClass() != obj.getClass()) 83 return false; 84 Person1 other = (Person1) obj; 85 if (age != other.age) 86 return false; 87 if (name == null) { 88 if (other.name != null) 89 return false; 90 } else if (!name.equals(other.name)) 91 return false; 92 return true; 93 } 94 95 96 }
 1     public static void main(String[] args) {
 2         int i = 10;
 3         int j = 10;
 4         double d = 10.0;
 5         char c = 10;
 6         System.out.println(i == j);//true
 7         System.out.println(i == d);//true
 8         System.out.println(c == i);//true
 9         
10         Person1 person1 = new Person1("Tom", 11);
11         Person1 person2 = new Person1("Tom", 11);
12         
13         
14         System.out.println(person1 == person2);//false
15         System.out.println(person1.equals(person2));//false重寫前,重寫後是true;
16     }

toString()方法:

Object類中tostring()的使用
1.當我們輸出一個物件的引用是,實際上呼叫的是當前物件的toString();
2.Object的定義:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
3. String Date File 包裝類等都重寫過toString()方法,使得在呼叫物件的實體時,返回“實體資訊”;
4.自定義類也可以重寫toString()方法,一般預設生成即可
5.物件.toString();如果物件是null 則報錯 空指標異常;

Junit單元測試:

Java中的JUnite單元測試
步驟:1.選中當前工程 右鍵選擇bulidpath add libraries -- JUnite 5 - finish;
2.建立Java類,進行單元測試;此類是public 此類提供公共的無參構造器
3.此類中宣告單元測試方法:
許可權是public 沒有返回值 沒有形參;
需要@Test註解,
在單元測試類中匯入 import org.junit.Test
4.宣告好單元測試方法以後,就可以在方法體內測試相關程式碼;
5.寫完程式碼以後,左鍵雙擊方法名,右鍵:run as JUnite Test
說明:
1.如果執行結構沒有任何異常,綠條
2.如果執行結果出現異常,紅條

包裝類:

包裝類的使用
1.java提供了8種基本資料型別對應的包裝類,使得基本資料型別的變數具有類的特徵;
2.基本資料型別 包裝類 string 三者之間的轉換;

 1 //基本資料型別 --》 包裝類:呼叫包裝類的構造器
 2     @Test 
 3     public void test1() {
 4         int num1 = 10;
 5         Integer in1 = new Integer(num1);
 6         System.out.println(in1.toString());
 7         Float f1 = new Float(12.3);
 8         Double d1 = new Double(12.3);
 9         Boolean b1 = new Boolean(true);
10         Boolean b2 = new Boolean("true");
11         Boolean b3 = new Boolean("true123");
12         System.out.println(b3);//false
13     }
14     //包裝類--》 基本資料型別 :呼叫包裝類的 xxxValue();
15     @Test 
16     public void test2() {
17         int num1 = 10;
18         Integer in1 = new Integer(num1);
19         int num2 = in1.intValue();
20         System.out.println(num2+1);
21         Float f1 = new Float(12.3);
22         float f2 = f1.floatValue();
23         System.out.println(f2);//false
24     }
25     //自動裝箱 與 自動拆箱
26     @Test 
27     public void test3() {;
28         int num = 10;
29         Integer in1 = num;//自動裝箱
30         int num1 = in1;//自動拆箱;
31         method(num);
32     }
33     //基本資料型別 包裝類 --》String; 呼叫String過載的valueOf(Xxx xxx);
34     @Test 
35     public void test4() {
36     //方式一
37         int num = 10;
38         String str = num+"";
39         //方式二
40         str = String.valueOf(num);
41         
42     }
43     // String--》基本資料型別 包裝類; 包裝類的parseXXX();
44     @Test 
45     public void test5() {
46         String str = "123";
47         //可能會出現 numberformate 異常
48         Integer in1 = Integer.parseInt(str);
49         String str1 = "true";
50         Boolean b1 = Boolean.parseBoolean(str1);
51         
52         
53     }
54     public void method(Object obj) {
55         System.out.println(obj);
56     }