zoukankan      html  css  js  c++  java
  • C#Equals()和运算符==的区别

    1.对于值类型

    如果对象的值相等,则相等运算符==返回True,否则返回False


    2.对于引用类型

    equals方法比较的是两个对象指向的内存空间内容是不是相同。也就是比较两个引用类型是否是对同一个对象的引用,即两个对象的内容是否相等。


    对于string类型,==比较字符串的值


    对于引用类型,==操作符类似于比较的是文件夹的路径是否相同,而equals方法比较的是文件夹中的内容是不是一样。

    using System;
    
    namespace Equals和等号的区别
    {
        class ClassPerson
        {
            private string name=null;
            public ClassPerson(string strname)
            {
                name = strname;
            }
            public string Name
            {
                set { name = value; }
                get { return name; }
            }
        }
        class Program
        {
            static void Main(string[] args)
            {
                string s1 = "test";
                string s2 = "test";
                Console.WriteLine(s1 == s2);    //True
                Console.WriteLine(s1.Equals(s2));   //True
    
                object o1 = s1;
                object o2 = s2;
                Console.WriteLine(o1 == o2);//True
                Console.WriteLine(o1.Equals(o2));//True
    
                string s3 = new string(new char[] { 't', 'e', 's', 't' });
                string s4 = new string(new char[] { 't', 'e', 's', 't' });
                Console.WriteLine(s3 == s4);//True
                Console.WriteLine(s3.Equals(s4));//True
    
                object o3 = s3;
                object o4 = s4;
                Console.WriteLine(o3 == o4);//False
                Console.WriteLine(o3.Equals(o4));//True
    
                ClassPerson p1 = new ClassPerson("ltp");
                ClassPerson p2 = new ClassPerson("ltp");
                Console.WriteLine(p1 == p2);//False
                Console.WriteLine(p1.Equals(p2));//False
    
                ClassPerson p3 = new ClassPerson("ltp");
                ClassPerson p4 = p3;
                Console.WriteLine(p3 == p4);//True
                Console.WriteLine(p3.Equals(p4));//True
            }
        }
    }
    

    因为类型是存储在内存中的堆栈(以下简称),而引用类型的变量在中仅仅是存储引用类型变量的地址,而其本身则存储在中。

    ==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在中存储的地址是否相同,即中的内容是否相同。

    equals操作表示的是两个变量是否是对同一个对象的引用,即中的内容是否相同。


    堆和栈的区别是?

    1、栈区(stack)―   由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 
    
    2、堆区(heap) ―   一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。
    
    
    堆和栈的区别可以用如下的比喻来看出: 
    
    使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由度小。 
    
    使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由度大。


  • 相关阅读:
    Linux内核之 I/O多路复用
    Linux内核之 页高速缓存与页回写
    Linux内核之 块I/O层及I/O调度
    Linux内核之 文件I/O
    C++雾中风景15:聊聊让人抓狂的Name Mangling
    音频数据增强及python实现
    深度学习中“过拟合”的产生原因和解决方法
    资料-资源(不定期更新)
    论文翻译:2020_Acoustic Echo Cancellation Challenge Datasets And Testingframework
    语音信号处理概念
  • 原文地址:https://www.cnblogs.com/fornet/p/2976156.html
Copyright © 2011-2022 走看看