最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#基礎(chǔ):Equals()與運(yùn)算符==的區(qū)別分析

 更新時(shí)間:2013年05月22日 17:01:47   作者:  
本篇文章是對(duì)c#中的Equals()與運(yùn)算符==的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
對(duì)于值類型,如果對(duì)象的值相等,則相等運(yùn)算符 (==) 返回 true,否則返回 false。對(duì)于string 以外的引用類型,如果兩個(gè)對(duì)象引用同一個(gè)對(duì)象,則 == 返回 true。對(duì)于 string 類型,== 比較字符串的值。
==操作比較的是兩個(gè)變量的值是否相等。
equals()方法比較的是兩個(gè)對(duì)象的內(nèi)容是否一致.equals也就是比較引用類型是否是對(duì)同一個(gè)對(duì)象的引用。
對(duì)于值類型的比較,這里就不做描述了,下面討論引用類型的比較:
首先我們看一段程序
復(fù)制代碼 代碼如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
    class Person
    {
        private string name;
        public string Name
        {
            get { return name; }
            set { name = value; }
        }
        public Person(string name)
        {
            this.name = name;
        }
    }
}

復(fù)制代碼 代碼如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string a = new string(new char[] { 'h', 'e', 'l', 'l', 'o' });
            string b = new string(new char[] { 'h', 'e', 'l', 'l', 'o' });
            Console.WriteLine(a == b);
            Console.WriteLine(a.Equals(b));
            object g = a;
            object h = b;
            Console.WriteLine(g == h);
            Console.WriteLine(g.Equals(h));
            Person p1 = new Person("jia");
            Person p2 = new Person("jia");
            Console.WriteLine(p1 == p2);
            Console.WriteLine(p1.Equals(p2));
            Person p3 = new Person("jia");
            Person p4 = p3;
            Console.WriteLine(p3 == p4);
            Console.WriteLine(p3.Equals(p4));
            Console.ReadLine();
        }
    }
}

運(yùn)行程序,會(huì)輸出什么呢?
答案是 true,true,false,true,false,false,true,true。
為什么會(huì)出現(xiàn)這個(gè)答案呢?因?yàn)橹殿愋褪谴鎯?chǔ)在內(nèi)存中的堆棧(以后簡(jiǎn)稱棧),而引用類型的變量在棧中僅僅是存儲(chǔ)引用類型變量的地址,而其本身則存儲(chǔ)在堆中。
    ==操作比較的是兩個(gè)變量的值是否相等,對(duì)于引用型變量表示的是兩個(gè)變量在堆中存儲(chǔ)的地址是否相同,即棧中的內(nèi)容是否相同。
    equals操作表示的兩個(gè)變量是否是對(duì)同一個(gè)對(duì)象的引用,即堆中的內(nèi)容是否相同。
    而字符串是一個(gè)特殊的引用型類型,在C#語(yǔ)言中,重載了string 對(duì)象的很多方法方法(包括equals()方法),使string對(duì)象用起來(lái)就像是值類型一樣。
    因此在上面的例子中,字符串a(chǎn)和字符串b的兩個(gè)比較是相等的。
    對(duì)于object g 和object h 時(shí)內(nèi)存中兩個(gè)不同的對(duì)象,所以在棧中的內(nèi)容是不相同的,故不相等。而g.equals(h)用的是sting的equals()方法故相等(多太)。如果將字符串a(chǎn)和b作這樣的修改:
        string a="aa";
        string b="aa";
則,g和h的兩個(gè)比較都是相等的。這是因?yàn)橄到y(tǒng)并沒(méi)有給字符串b分配內(nèi)存,只是將"aa"指向了b。所以a和b指向的是同一個(gè)字符串(字符串在這種賦值的情況下做了內(nèi)存的優(yōu)化)。
對(duì)于p1和p2,也是內(nèi)存中兩個(gè)不同的對(duì)象,所以在內(nèi)存中的地址肯定不相同,故p1==p2會(huì)返回false,又因?yàn)閜1和p2又是對(duì)不同對(duì)象的引用,所以p1.equals(p2)將返回false。
對(duì)于p3和p4,p4=p3,p3將對(duì)對(duì)象的引用賦給了p4,p3和p4是對(duì)同一個(gè)對(duì)象的引用,所以兩個(gè)比較都返回true。
如果我們對(duì)person的equals方法重寫:
復(fù)制代碼 代碼如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
    class Person
    {
        private string name;
        public string Name
        {
            get { return name; }
            set { name = value; }
        }
        public Person(string name)
        {
            this.name = name;
        }
        public override bool Equals(object obj)
        {
            if (!(obj is Person))
                return false;
            Person per = (Person)obj;
            return this.Name == per.Name;
        }
    }
}

那么p1.equals(p2),就會(huì)返回true。

相關(guān)文章

  • 詳解WPF中用戶控件和自定義控件的使用

    詳解WPF中用戶控件和自定義控件的使用

    無(wú)論是在WPF中還是WinForm中,都有用戶控件(UserControl)和自定義控件(CustomControl),這兩種控件都是對(duì)已有控件的封裝,實(shí)現(xiàn)功能重用。但是兩者還是有一些區(qū)別,本文對(duì)這兩種控件進(jìn)行講解
    2023-03-03
  • C#調(diào)用pyd的方法

    C#調(diào)用pyd的方法

    這篇文章主要介紹了C#調(diào)用pyd的方法,幫助大家在項(xiàng)目中實(shí)現(xiàn)c#代碼與python代碼交互,在C#中調(diào)用python,也可以在python中調(diào)用C#.
    2020-11-11
  • c#操作附加數(shù)據(jù)庫(kù)的方法

    c#操作附加數(shù)據(jù)庫(kù)的方法

    這篇文章主要介紹了c#操作附加數(shù)據(jù)庫(kù)的方法,涉及C#針對(duì)附加數(shù)據(jù)庫(kù)的相關(guān)操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-08-08
  • Quartz.Net調(diào)度框架配置解析

    Quartz.Net調(diào)度框架配置解析

    這篇文章主要為大家詳細(xì)介紹了Quartz.Net調(diào)度框架的配置方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • C#算法之整數(shù)反轉(zhuǎn)

    C#算法之整數(shù)反轉(zhuǎn)

    這篇文章介紹了C#算法之整數(shù)反轉(zhuǎn),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-01-01
  • c# dynamic的使用詳解

    c# dynamic的使用詳解

    這篇文章主要介紹了c# dynamic的使用詳解,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
    2021-04-04
  • 一文帶你了解WPF中的附加事件

    一文帶你了解WPF中的附加事件

    附加事件可用于在非元素類中定義新的 路由事件 ,并在樹(shù)中的任何元素上引發(fā)該事件。本文通過(guò)簡(jiǎn)單的示例為大家講解一下WPF附加事件的用法,需要的可以參考一下
    2022-12-12
  • C#控制臺(tái)基礎(chǔ) list<>初始化的兩種方法

    C#控制臺(tái)基礎(chǔ) list<>初始化的兩種方法

    這篇文章主要介紹了C#控制臺(tái)基礎(chǔ) list<>初始化的兩種方法,需要的朋友可以參考下
    2016-12-12
  • C#實(shí)現(xiàn)過(guò)濾sql特殊字符的方法集合

    C#實(shí)現(xiàn)過(guò)濾sql特殊字符的方法集合

    這篇文章主要介紹了C#實(shí)現(xiàn)過(guò)濾sql特殊字符的方法,以實(shí)例形式分析總結(jié)了C#針對(duì)SQL危險(xiǎn)字符的幾種常用的過(guò)濾技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-11-11
  • C# 對(duì)PDF文檔加密、解密(基于Spire.Cloud.SDK for .NET)

    C# 對(duì)PDF文檔加密、解密(基于Spire.Cloud.SDK for .NET)

    這篇文章主要介紹了C# 基于Spire.Cloud.SDK for .NET對(duì)PDF文檔進(jìn)行加密解密,文中講解非常細(xì)致,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07

最新評(píng)論

五峰| 石首市| 台北市| 扎囊县| 扶沟县| 阿瓦提县| 綦江县| 山阳县| 沽源县| 商都县| 车致| 泰顺县| 长葛市| 宁津县| 亳州市| 石台县| 寿阳县| 双江| 灵石县| 临夏市| 德令哈市| 新丰县| 天镇县| 威海市| 徐水县| 库车县| 大英县| 顺平县| 红安县| 利辛县| 甘泉县| 丹棱县| 赤城县| 宝丰县| 武川县| 阿图什市| 柘荣县| 浪卡子县| 香格里拉县| 蒙自县| 库伦旗|