黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

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

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

更新時間:2019-09-16 11:27:48 來源:動力節(jié)點 瀏覽2623次

  

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


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


一、clone


  1、clone()方法


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


  clone()將返回Object對象的一個拷貝。要說明的有兩點:一是拷貝對象返回的是一個新對象,而不是一個引用。二是拷貝對象與用 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

    }

}


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


  4、Deep Cloning


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

 

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


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

  

String str1 = "abc";

String str2 = "abc";

str1.equals(str2);//true


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


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


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


  自反性。表達式x.equals(x)應該返回true。


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


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


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


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


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


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


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


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


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


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類中包含一個方法名叫getClass,利用這個方法就可以獲得一個實例的類型類。類型類指的是代表一個類型的類,因為一切皆是對象,類型也不例外,在Java使用類型類來表示一個類型。所有的類型類都是Class類的實例。


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


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


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



  四、toString


  toString()是Object類的一個公有方法,而所有類都繼承自Object類。所以所有類即使不實現(xiàn)toString方法,也會存在從Object類繼承來的toString。Object類提供了toString()方法的默認實現(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]

   }

}


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

 

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;

  }

}


以上就是動力節(jié)點java培訓機構小編介紹的“java中object類的常用方法有哪些?”的內(nèi)容,希望對大家有幫助,更多java最新資訊請繼續(xù)關注動力節(jié)點java培訓機構官網(wǎng),每天會有精彩內(nèi)容分享與你。


相關免費視頻教程推薦


java入門學習零基礎教程下載——Object類簡介:http://m.ilovecolors.com.cn/xiazai/2586.html


提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 欧美一级片在线播放 | 亚洲成人99 | 五月天婷婷综合 | 国产成人精品视频播放 | 国产在线乱子伦一区二区 | 1024手机基地在线看手机 | 日韩欧美在线观看视频 | 亚1洲二区三区四区免费 | 精品亚洲欧美高清不卡高清 | 一个人在线免费观看www | 在线观看免费播放网址成人 | 欧美老妇人与禽交 | 久久午夜网 | 亚洲欧美黄色片 | 国产日韩欧美另类 | 亚洲欧美日韩中文高清一 | 69堂午夜精品视频在线 | 亚洲福利网站 | 最近的中文字幕2019更新 | 欧美一二三区 | 精品在线一区二区三区 | 国产在线视频www色 国产在线视频国产永久视频 | 天天摸天天澡天天碰天天弄 | 在线免费污视频 | 超级h荡的辣文小说乱bh | 午夜国产在线观看 | 制服丝袜中文字幕第一页 | 亚洲精品在线播放 | 久草中文视频 | 日韩毛片免费观看 | 日韩欧美视频免费观看 | 国产一区二区三区日韩 | 又www又黄又爽啪啪网站 | 奇米一二区 | 久久国产精品偷 | 国产成人在线观看免费网站 | 国产亚洲青色国产 | 亚洲成a人片在线播放观看国产 | 国产精品国产三级在线高清观看 | 夜夜躁狠狠躁日日躁视频 | 免费的黄色一级片 |