国产宅男网站在线|亚洲A级性爱免费视频|亚洲中精品级在线|午夜福利AA毛

  • <dd id="gf5jf"><th id="gf5jf"></th></dd>

    <cite id="gf5jf"><label id="gf5jf"></label></cite>
  • <div id="gf5jf"><listing id="gf5jf"></listing></div>
    學(xué)習(xí)啦 > 知識(shí)大全 > 知識(shí)百科 > 公共基礎(chǔ)知識(shí) > ==和equals的區(qū)別

    ==和equals的區(qū)別

    時(shí)間: 映芳735 分享

    ==和equals的區(qū)別

      ==操作比較的是兩個(gè)變量的值是否相等,對(duì)于引用型變量表示的是兩個(gè)變量在堆中存儲(chǔ)的地址是否相同,即棧中的內(nèi)容是否相同。

      比較的是一個(gè)對(duì)象在內(nèi)存中的地址值,

      比如2個(gè)字符串對(duì)象

      String s1 = new String("str");

      String s2 = new String("str");

      如果用==號(hào)比較,會(huì)返回false,因?yàn)閯?chuàng)建了兩個(gè)對(duì)象,他們?cè)趦?nèi)存中地址的位置是不一樣的。

      equals操作表示的兩個(gè)變量是否是對(duì)同一個(gè)對(duì)象的引用,即堆中的內(nèi)容是否相同。

      equals的情況比較復(fù)雜,它是java.lang.Object類中的一個(gè)方法。因?yàn)閖ava中所有的類都默認(rèn)繼承于Object,所以所有的類都有這個(gè)方法。

      在Object類源碼中是這樣寫的。

      public boolean equals(Object obj) {

      return (this == obj);

      }

      他同樣使用==號(hào)進(jìn)行內(nèi)存地址的比較。但是許多java類中都重寫了這個(gè)方法,比如String。

      public boolean equals(Object anObject) {

      if (this == anObject) {

      return true;

      }

      if (anObject instanceof String) {

      String anotherString = (String)anObject;

      int n = count;

      if (n == anotherString.count) {

      char v1[] = value;

      char v2[] = anotherString.value;

      int i = offset;

      int j = anotherString.offset;

      while (n-- != 0) {

      if (v1[i++] != v2[j++])

      return false;

      }

      return true;

      }

      }

      return false;

      }

      String里的方法,如果==號(hào)比較不相等,還會(huì)進(jìn)行一下值的比較。

      所以equals方法具體的作用要看當(dāng)前的那個(gè)類是如何實(shí)現(xiàn)重寫父類中該方法的。如果沒有重寫該方法,那么他和==號(hào)等價(jià)。

    530126