天天看點

Object、Equal/==、包裝類

Object類

    在java類繼承結構中,java.lang.Object類位于頂端;

    如果定義一個java類時沒有使用extends關鍵字聲明其父類,則其父類預設為java.lang.Object類

    Object類型的引用變量可以指向任何類型對象

重寫toString方法    

    Object類中的重要方法,用于傳回對象值的字元串表示;原則上建議重寫,格式大多遵循"類的名字[域值]",例如:

    public String toString() {

return getClass().getName();

+"[name="+name

+",salary="+salary

+",gender="+gender

+"]";

}

    java語言中很多地方會預設調用對象的toString方法:

    字元串+對象,自動調用對象的toString方法

    -System.out.print(任意對象),直接調用toString方法

    如果不重寫toString方法,将使用Object的toString方法,其邏輯為:--類名@散列碼

     toString方法是非常有用的調試工具;

    JDK中的标準類庫中,許多類都定義了toString方法,友善使用者擷取有關對象狀态的必要資訊;

    強烈建議為自定義的每一個類增加toString方法

重寫Cell的toString()方法

    public class Cell{

    //重寫toString方法,傳回對cell資訊的描述

  @Override

              public  String to String(){

         return getClass().getName()+"["+row+","+col+"]";

     }

}

String重寫toString方法

    String的toString()方法就是将自身傳回了

    public String toString(){

    return this;

   }

equals方法

    Object中的方法,作用在于檢測一個對象是否等于另外一個對象;

    在Object類中,這個方法判斷兩個對象是否具有相同的引用,即是否為相同的對象;

    在實際應用中,一般需要重寫該方法,通過比較對象的成員屬性,使該方法更有意義,例如:對于Cell類,如果不重寫equals方法,下面代碼在cell1和cell2指向用一個對象才為true,可以将其重寫為:當x和y坐标相等時,兩個對象即相等,這樣更加有意義一些.

  如何重寫equals方法

    public boolean equals(Object obj){

        if(obj==null){

                return false;

        }

      if(this==obj){

       return true;

        }

    if(obj instanceof Cell){

     Cell cell=(Cell) obj;

   return cell.row==row&& cell.col==col;

   }else{

  return false;

  }

}

equals和==的差別

    ==用于比較變量的值,可以應用于任何類型,如果用于引用類型,比較的是兩個引用變量中存儲的值(位址資訊),判斷兩個變量是否指向相同的對象;

    equlas是Object的方法,重寫以後,可以用于比較兩個對象的内容是否"相等";

    需要注意的是,Object預設的equals方法的比較規則用==

包裝類

    在進行類型轉換的範疇内,有一種特殊的轉換,需要将int這樣的基本資料類型轉換為對象;

    所有的基本類型都有一個與之對應的類,即包裝類(wrapper)

包裝類概述

    包裝類是不可變類,在構造了包裝類對象後,不允許更改包裝在其中的值

    包裝類是final的,不能定義他們的子類

    int ------------java.lang.Integer

    long----------java.lang.Long

    double-------java.lang.Double

     short--------java.lang.Short

     float--------java.lang.Float

     byte--------java.lang.Byte

     char--------java.lang.Character

     boolean---java.lang.Boolean

抽象類Number是Byte、Double、Float、Integer、Long、Short類的父類

    --doubleValue() 以double形式傳回指定的數值

    --intValue() 以int 形式傳回指定的數值

    --floatValue()以float形式傳回指定的數值

   static int MAX_VALUE 值為:2^31 -1的常量,表示int類型能表示的最大值

   static int MIN_VALUE 值為:-2^31的常量,表示int類型能表示的最小值

Integer的靜态方法parseInt用于将字元串轉換為int.

    String str="123";

    int value=Integer.parseInt(str);

    System.out.println(value);  //123

    str="壹佰貳";

    //會抛出NumberFormatException 

自動裝箱和拆箱操作

    從java5.0版本以後到了autoboxing功能,自動"拆箱"和"裝箱”是依靠JDK5的編譯器在編譯器的預處理工作.

下列代碼寫法均為正确形式:

    Integer a=100;  //裝箱

    Integer b=200;  //裝箱

    Integer c=a+b  //拆箱再裝箱

    double d=c      // 拆箱

裝箱和拆箱是"編譯器"認可的,而不是虛拟機.編譯器在生成類的位元組碼時插入必要的方法調用

Integer a=100 ==>Integer a=Integer.valueOf(100);

int  d=c=======>int d=c.intValue();