zoukankan      html  css  js  c++  java
  • 比较对象的相对性

    考虑在处理类和结构的实例时,“相等”意味着什么?

    1.比较引用类型的相等性

    有四种不同的方法来比较对象的想等性

    // --------  比较引用类型的相等性  --------
     //
     // ------- 有四种不同的方法来比较对象的想等性  -----
                
    object obj1 = new object();
    object obj2 = obj1;//new object();
                
    //静态方法,测试两个引用是否引用类的同一个实例,判断的是内存中的相同地址
    object.ReferenceEquals(obj1, obj2); //false
    object.ReferenceEquals(null, null); //true
    object.ReferenceEquals(obj1, obj1); //true
    
    //object基类中的虚方法,与ReferenceEquals版本的实现相同,比较的是的内存地址
    //因为是虚方法,所以在派生类对象中可以进行重写,按对象值进行比较
    //重写方法时,不能抛出异常
    obj1.Equals(obj2);
    
    //静态方法
    //如果两个参数都为null,则返回true
    //如果两个参数,其中一个为null,则返回false
    //如果两个参数都不为null,则调用上面虚拟版本的Equals(obj)方法
    object.Equals(obj1,obj2);
    
    //比较运算符 ==
    // == 默认进行的也是内存地址比较
    // string 类重写了 == 运算符,string 进行的是值比较
    if (obj1 == obj2) { }
    

      

     比较值类型的相等性

     比较引用类型的四种方法,也可以用来比较值类型,但有部分区别

    // object.ReferenceEquals(obj1, obj2) 用于比较引用,即内存地址,但是值类型需要装箱,所以结果永远false。
    // Equals 用于比较值, 结构体的Equals会对每个字段值进行比较
    // 如果值类型的某个字段是引用类型,则最好重写Equals,因为引用类型默认比较内存地址
    

      

    比较 Equals()、ReferenceEquals()、==

  • 相关阅读:
    struts1与struts2的防止表单重复提交
    JSTL 笔记
    fiddler的columns添加HTTPMethod
    兼容性测试技巧
    测试基础知识总结
    测试用例的书写方式及测试模板大全【转】
    软件测试的方法分类
    解决vue不支持promise语法问题
    vue-router 导航守卫
    e.target与事件委托简例【转】
  • 原文地址:https://www.cnblogs.com/lztwj/p/7216789.html
Copyright © 2011-2022 走看看