程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#中的 == 和equals()差別淺析

C#中的 == 和equals()差別淺析

編輯:C#入門知識

C#中的 == 和equals()差別淺析。本站提示廣大學習愛好者:(C#中的 == 和equals()差別淺析)文章只能為提供參考,不一定能成為您想要的結果。以下是C#中的 == 和equals()差別淺析正文


起首看看,如以下代碼:

int age = 25; 
short newAge = 25; 
Console.WriteLine(age == newAge); //true 
Console.WriteLine(newAge.Equals(age)); //false 
Console.ReadLine();

int和short為原始類型,但與“==”比擬前往true,equals()比擬前往false。為何呢?

簡而言之:“equals()”比擬“= =”龐雜。

詳細來講:

  原始類型籠罩(override)基類的object.Equals(object),而且當括弧中的object與其類型和值雷同時前往true (留意Nullable類型也合適上述斷定;非空Nullable類型老是裝箱到一個基本類型實例)。

  因為newAge是short,是以在object是short且值與newAge值相等時,newAge.Equals(object)前往true。你傳遞的是一個int對象,所以它前往false。

  比擬之下,“= =”運算符被界說為帶兩個整形(int)或兩個短整型(short)或兩個長整形(long)的運算。當“= =”兩個參數一個是整形和一個短整型時,編譯器會隱式轉換short為int,並比擬轉換後int值年夜小。

使其任務其他辦法:

  原始類型也有本身的equals()辦法,equals接收雷同的類型的參數。

  假如你寫age.Equals(newAge),編譯器將選擇int.Equals(int)作為最好的重載(overload)辦法且隱式轉換short為int。然後,它會前往true,由於這類辦法直接比擬兩個int值年夜小。

  short也有一個short.Equals(short)辦法,然則int類型不克不及隱式轉換為short,所以就不會挪用它。

  你可使用cast轉換強迫挪用這個辦法:

Console.Writeline(newAge.Equals((short)age)); //true
  這將直接挪用short.Equals(short),沒有裝箱操作。假如age年夜於32767,它會拋出一個溢出異常。

  你也可挪用short.Equals(object)這個重載,但須要明白地傳遞一個經由裝箱的具有雷同類型的對象:
Console.WriteLine(newAge.Equals((object)(short)age)); // true
  像後面可選辦法(short.Equals(short))一樣,假如年夜小跨越short規模,異樣拋出一個溢出異常。分歧於以往的處理計劃,它將short裝箱成一個object——糟蹋time和memory。

這裡是現實中應用的Equals():

public override bool Equals(Object obj) { 
    if (!(obj is Int16)) {
      return false; 
    } 
    return m_value == ((Int16)obj).m_value; 
  } 
  public bool Equals(Int16 obj) 
  { 
    return m_value == obj; 
  }

經由過程這篇文章年夜家是否是對C#中的 == 和equals()的差別有所懂得了,願望這篇文章對年夜家的進修有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved