大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國(guó)咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁(yè) 學(xué)習(xí)攻略 java中object類的常用方法有哪些?

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

更新時(shí)間:2019-09-16 11:27:48 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽2601次

  

今天動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)小編為大家介紹“java中object類的常用方法”,希望通過此文大家能夠知道object類的常用方法,下面就隨小編一起看看java中object類的常用方法有哪些?


u=4195299513,2392537383&fm=11&gp=0.jpg


一、clone


  1、clone()方法


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


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


  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í),它會(huì)接收自身的淺拷貝。也就是說,它與其克隆共享其實(shí)例變量中使用的holder對(duì)象。


  4、Deep Cloning


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

 

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)比較的是兩個(gè)對(duì)象的引用是否指向同一個(gè)內(nèi)存地址。hashCode 是一個(gè) native 本地方法,默認(rèn)的 hashCode 方法返回的就是對(duì)象對(duì)應(yīng)的內(nèi)存地址。


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

  

String str1 = "abc";

String str2 = "abc";

str1.equals(str2);//true


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


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


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


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


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


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


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


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


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


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


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


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


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


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 的兩個(gè)對(duì)象必須具有相等的哈希碼。


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



  三、getClass


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


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


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() 是一個(gè)類的實(shí)例所具備的方法,而class() 方法是一個(gè)類的方法。


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



  四、toString


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


  <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方法,在控制臺(tái)中打印一個(gè)對(duì)象會(huì)自動(dòng)調(diào)用對(duì)象類的toString方法,所以我們可以實(shí)現(xiàn)自己的toString方法在控制臺(tái)中顯示關(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òng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)小編介紹的“java中object類的常用方法有哪些?”的內(nèi)容,希望對(duì)大家有幫助,更多java最新資訊請(qǐng)繼續(xù)關(guān)注動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)官網(wǎng),每天會(huì)有精彩內(nèi)容分享與你。


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


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


提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)

  • 全國(guó)校區(qū) 2025-04-24 搶座中
  • 全國(guó)校區(qū) 2025-05-15 搶座中
  • 全國(guó)校區(qū) 2025-06-05 搶座中
  • 全國(guó)校區(qū) 2025-06-26 搶座中
免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 欧美艹逼视频 | 亚洲国产精品毛片∧v卡在线 | 久久久久女人精品毛片 | 久久精品在现线观看免费15 | 88国产经典欧美一区二区三区 | 亚洲欧美一区二区三区 | 欧美高清一区二区 | 天天天天操 | 久久99精品亚洲热综合 | 天天摸天天碰色综合网 | 国产成人精品本亚洲 | 亚洲啪视频 | 欧美黑人乱大交ⅹxxxxx | 国产精品成人网 | 国产区二区 | 色婷婷香蕉| 国产69精品久久久久99不卡 | 91视频亚洲| 免费费看的欧亚很色大片 | 国产产一区二区三区久久毛片国语 | 免费观看大片毛片 | 99re在线这里只有精品 | 91官网| 久久这里只有精品视频99 | 亚洲加勒比久久88色综合一区 | 欧美激情毛片 | 日本黄色小视频在线观看 | 九九99久久精品影视 | 亚洲国产99在线精品一区二区 | 成人亚洲性情网站www在线观看 | 免费视频日韩 | 久久精品国产6699国产精 | 91亚洲区国产区精品区 | 在线成人毛片 | 成人在线亚洲 | 午夜影视在线观看 | 久久精品国产色蜜蜜麻豆 | 久久天堂网 | 天海翼一区二区三区免费 | 狠狠涩| 四虎黄色影院 |