java中object類的常用方法有哪些?

java中object類的常用方法有哪些?

長沙達(dá)內(nèi)教育      2022-04-01 10:00:01     8

java中object類的常用方法有哪些?,  今天長沙達(dá)內(nèi)教育java培訓(xùn)機(jī)構(gòu)小編為大家介紹“java中object類的常用方法”,希望通過此文大家能夠知道object類的常用方法,

課程價(jià)格 請咨詢

上課時(shí)段: 授課校區(qū):

詳細(xì)介紹

  

今天長沙達(dá)內(nèi)教育java培訓(xùn)機(jī)構(gòu)小編為大家介紹“java中object類的常用方法”,希望通過此文大家能夠知道object類的常用方法,下面就隨小編一起看看java中object類的常用方法有哪些?



一、clone


  1、clone()方法


  在實(shí)際編程過程中,常常遇到這種情況:有一個對象A,在某一時(shí)刻A中已經(jīng)包含了一些有效值,此時(shí)可能會需要一個和A完全相同新對象B,并且此后對B任何改動都不會影響到A中的值,也就是說,A與B是兩個獨(dú)立的對象,但B的初始值是由A對象確定的。在Java語言中,用簡單的賦值語句是不能滿足這種需求的。實(shí)現(xiàn)clone()方法是滿足需求最簡單,也是最高效的手段。


  clone()將返回Object對象的一個拷貝。要說明的有兩點(diǎn):一是拷貝對象返回的是一個新對象,而不是一個引用。二是拷貝對象與用 new操作符返回的新對象的區(qū)別就是這個拷貝已經(jīng)包含了一些原來對象的信息,而不是對象的初始信息。


  2、例子


public class Test implements Cloneable{

    private double value;


    public Test(double value) {

        this.value = value;

    }


    public void setValue(double value) {

        this.value = value;

    }


    public double getValue() {

        return this.value;

    }


    public Object clone() {

        Test copy = null;

        try {

            copy = (Test) super.clone();

        } catch (CloneNotSupportedException e) {

            e.printStackTrace();

        }

        return copy;

    }

}


public class Main {

    public static void main(String[] args) {

        Test dh = new Test(100.00);

        Test dhClone = (Test) dh.clone();


        System.out.println("Original:" + dh.getValue()); //Original:100.0

        System.out.println("Clone :" + dhClone.getValue()); //Clone :100.0


        dh.setValue(200.00);

        dhClone.setValue(400.00);


        System.out.println("Original:" + dh.getValue()); //Original:200.0

        System.out.println("Clone :" + dhClone.getValue()); //Clone :400.0

    }

}

  

3、Shallow Cloning


public class Test {

    private double value;


    public Test(double value) {

        this.value = value;

    }


    public void setValue(double value) {

        this.value = value;

    }


    public double getValue() {

        return this.value;

    }


public class ShallowClone implements Cloneable {

    public Test holder = new Test(0.0);

    public Object clone() {

        ShallowClone copy = null;

        try {

            copy = (ShallowClone) super.clone();

        } catch (CloneNotSupportedException e) {

            e.printStackTrace();

        }

        return copy;

    }

}


public class Main {

    public static void main(String[] args) {

        ShallowClone  dh = new ShallowClone();

        dh.holder.setValue(100.00);

        ShallowClone  dhClone = (ShallowClone ) dh.clone();


        System.out.println("Original:" + dh.holder.getValue()); //Original:100.0

        System.out.println("Clone :" + dhClone.holder.getValue()); //Clone :100.0


        dh.holder.setValue(200.00);


        System.out.println("Original:" + dh.holder.getValue()); //Original:200.0

        System.out.println("Clone :" + dhClone.holder.getValue()); //Clone :200.0

    }

}


  此例子中當(dāng)ShallowClone類使用super.clone()調(diào)用Object類的clone()方法時(shí),它會接收自身的淺拷貝。也就是說,它與其克隆共享其實(shí)例變量中使用的holder對象。


  4、Deep Cloning


  在深層克隆中,需要克隆對象的所有引用實(shí)例變量引用的所有對象。

 

public class Test implements Cloneable{

    private double value;


    public Test(double value) {

        this.value = value;

    }


    public void setValue(double value) {

        this.value = value;

    }


    public double getValue() {

        return this.value;

    }


    public Object clone() {

        Test copy = null;

        try {

            copy = (Test) super.clone();

        } catch (CloneNotSupportedException e) {

            e.printStackTrace();

        }

        return copy;

    }

}


public class DeepClone implements Cloneable {

    public Test holder = new Test(0.0);

    public Object clone() {

        DeepClone copy = null;

        try {

            copy = (DeepClone) super.clone();

            copy.holder = (Test) this.holder.clone();

        } catch (CloneNotSupportedException e) {

            e.printStackTrace();

        }

        return copy;

    }

}


public class Main {

    public static void main(String[] args) {

        DeepClone dh = new DeepClone();

        dh.holder.setValue(100.00);

        DeepClone dhClone = (DeepClone) dh.clone();


        System.out.println("Original:" + dh.holder.getValue()); //Original:100.0

        System.out.println("Clone :" + dhClone.holder.getValue()); //Clone :100.0


        dh.holder.setValue(200.00);


        System.out.println("Original:" + dh.holder.getValue());  //Original:200.0

        System.out.println("Clone :" + dhClone.holder.getValue()); //Clone :100.0

    }

}



  二、equals


  1、概述


  equals 方法默認(rèn)比較的是兩個對象的引用是否指向同一個內(nèi)存地址。hashCode 是一個 native 本地方法,默認(rèn)的 hashCode 方法返回的就是對象對應(yīng)的內(nèi)存地址。


  equals 方法是基類 Object 的方法,創(chuàng)建的所有的對象都擁有這個方法,并有權(quán)利去重寫這個方法。該方法返回一個 boolean 值,代表比較的兩個對象是否相同,這里的相同的條件由重寫 equals 方法的類來解決。

  

String str1 = "abc";

String str2 = "abc";

str1.equals(str2);//true


  String 類重寫了 equals 方法,否則兩個 String 對象內(nèi)存地址肯定不同。


  2、equals()方法的實(shí)現(xiàn)的規(guī)范


  假設(shè)x,y和z是三個對象的非空引用。


  自反性。表達(dá)式x.equals(x)應(yīng)該返回true。


  對稱性。如果x.equals(y)返回true,y.equals(x)必須返回true。


  傳遞性。如果x.equals(y)返回true,y.equals(z)返回true,則x.equals(z)必須返回true。


  一致性。如果用于equals比較的對象信息沒有被修改的話,多次調(diào)用時(shí) x.equals(y) 要么一致地返回 true 要么一致地返回 false。


  與空引用的比較:任何類的對象不應(yīng)等于空引用。表達(dá)式x.equals(null)應(yīng)始終返回false。


  3、equals 與 == 的區(qū)別


  (1)若 == 兩側(cè)都是基本數(shù)據(jù)類型,則判斷的是左右兩邊操作數(shù)據(jù)的值是否相等


 ?。?)若 == 兩側(cè)都是引用數(shù)據(jù)類型,則判斷的是左右兩邊操作數(shù)的內(nèi)存地址是否相同。若此時(shí)返回 true , 則該操作符作用的一定是同一個對象。


 ?。?)Object 基類的 equals 默認(rèn)比較兩個對象的內(nèi)存地址,在構(gòu)建的對象沒有重寫 equals 方法的時(shí)候,與 == 操作符比較的結(jié)果相同。


  (4)equals 用于比較引用數(shù)據(jù)類型是否相等。在滿足equals 判斷規(guī)則的前體系,兩個對象只要規(guī)定的屬性相同我們就認(rèn)為兩個對象是相同的。


public class Test {

    public String name="abc";

    public static void main(String[] args) {

        Test test=new Test();

        Test testb=new Test();

        String a=new String("a");

        String b=new String("a");

        System.out.println(test.equals(testb));//false

        System.out.println(test==testb);//false

        System.out.println(test.name.equals(testb.name));//true

        System.out.println(a==b);//false

        System.out.println(a.equals(b));//true

    }   

}


  4、equals()和hashCode()的聯(lián)系


  調(diào)用 equals 返回 true 的兩個對象必須具有相等的哈希碼。


  如果兩個對象的 hashCode 返回值相同,調(diào)用它們 equals 方法不一返回 true 。



  三、getClass


  Object類中包含一個方法名叫g(shù)etClass,利用這個方法就可以獲得一個實(shí)例的類型類。類型類指的是代表一個類型的類,因?yàn)橐磺薪允菍ο?,類型也不例外,在Java使用類型類來表示一個類型。所有的類型類都是Class類的實(shí)例。


  一般情況下,getclass()方法和class方法是等價(jià)的,都可以獲得一個類型名,例:


class A{

    public void func(){


    }

}


public class Test {

    public static void main(String[] args) {

        A a = new A();

        System.out.println(a.getClass()+" "+A.class); //class A class A

    }

}


  getclass()和class的區(qū)別


  getClass() 是一個類的實(shí)例所具備的方法,而class() 方法是一個類的方法。


  getClass() 是在運(yùn)行時(shí)才確定的,而class() 方法是在編譯時(shí)就確定了。



  四、toString


  toString()是Object類的一個公有方法,而所有類都繼承自O(shè)bject類。所以所有類即使不實(shí)現(xiàn)toString方法,也會存在從Object類繼承來的toString。Object類提供了toString()方法的默認(rèn)實(shí)現(xiàn)。它返回一個以下格式的字符串:


  <fully qualified class name>@<hash code of object in hexadecimal>


例子:

import java.util.ArrayList;


public class ObjectDemo {

   public static void main(String[] args) {


      Integer i = new Integer(50);


      ArrayList list = new ArrayList();


      list.add(50);

      list.add("Hello World");


      System.out.println("" + i.toString());  //50

      System.out.println("" + list.toString()); //[50, Hello World]

   }

}


  類可以實(shí)現(xiàn)toString方法,在控制臺中打印一個對象會自動調(diào)用對象類的toString方法,所以我們可以實(shí)現(xiàn)自己的toString方法在控制臺中顯示關(guān)于類的有用信息。

 

public class Main{

  public static void main(String[] argv){

    MyClass obj  = new MyClass(123);

    String objStr = obj.toString();

    System.out.println(objStr);

  }

}

class MyClass {

  private int value;


  public MyClass(int value) {

    this.value = value;

  }


  public void setValue(int value) {

    this.value = value;

  }


  public int getValue() {

    return value;

  }


  public String toString() {

    String str = String.valueOf(this.value);

    return str;

  }

}


以上就是長沙達(dá)內(nèi)教育java培訓(xùn)機(jī)構(gòu)小編介紹的“java中object類的常用方法有哪些?”的內(nèi)容,希望對大家有幫助,更多java最新資訊請繼續(xù)關(guān)注長沙達(dá)內(nèi)教育java培訓(xùn)機(jī)構(gòu)官網(wǎng),每天會有精彩內(nèi)容分享與你。


相關(guān)免費(fèi)視頻教程推薦


java入門學(xué)習(xí)零基礎(chǔ)教程下載——Object類簡介:http://www.bjpowernode.com/xiazai/2586.html


培訓(xùn)啦提醒您:交易時(shí)請核實(shí)對方資質(zhì),對于過大宣傳或承諾需謹(jǐn)慎!任何要求預(yù)付定金、匯款等方式均存在風(fēng)險(xiǎn),謹(jǐn)防上當(dāng)。