zoukankan      html  css  js  c++  java
  • A.Equals(B)和A==B的区别

    Equals == 都是用于比较。

    如果ab都是值类型,则a.Equals(b) a == b 结果相同,但是在引用类型是它们的行为是不同的:

    string a = new string(new char[] {'d', 'a', 'n', 'c', 'e'});
    string b = new string(new char[] {'d', 'a', 'n', 'c', 'e'});
    object c = a;
    object d = b;

    Console.WriteLine (a==b);
    Console.WriteLine (a.Equals(b));
    Console.WriteLine (c==d);
    Console.WriteLine (c.Equals(d));

    输出结果:

    True
    True
    False
    True

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

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

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

    string是一种特殊的引用类型,使string对象用起来就像是值类型一样,string类型的==操作实际上是比较两个字符串的值是否相同。

    所以:
    Console.WriteLine (a==b);            // 比较两个字符串的值 - 返回true
    Console.WriteLine (a.Equals(b));    // 比较两个字符串的值 - 返回true
    Console.WriteLine (c==d);           // 比较两个对象的在堆中的地址是否相同 - 返回false
    Console.WriteLine (c.Equals(d));   // 比较两个对象的所指向的内容是否相同 - 返回true
  • 相关阅读:
    java进阶(36)--IO和Properties联合使用(配置文件)
    java进阶(34)--File类、目录复制
    java进阶(33)--IO流
    java进阶(32)--Collections工具类
    java进阶(31)--TreeSet集合、TreeMap集合、自平衡二叉树
    解决Excel打开空白或慢的问题
    CCS
    CCS
    CCS
    CCS
  • 原文地址:https://www.cnblogs.com/dacheng/p/3364732.html
Copyright © 2011-2022 走看看