关于两个对象的比较

两个数组对象进行比较&&两个数组进行比较 数组对象取出不同值 方法一: let array1 = [ {"name": "哆啦" },{"name": "莓莓" }]; let array2 = [ {"name": "哆啦","date": "2019-03" }, {"name": "莓莓","date": "2020-04"}, {"name": "布尔" ,"date": "2020-06"}]; let result = []; for(let i = 0; i < array2.length; 阅读详情
今天实现了一段代码,是将遍历pocUserArray(ArrayList)中的每个item,如果它不在pocUserInSeson(ArrayList)中,那么将它加到一个用户树结构中。第一次是这样实现的:
foreach (PoCContactItem pocContactItem in Global.pocUserArray)
            
{
                
for (int i = 0; i < Global.pocUserInSesonArray.Count; i++)
                
{
                    
if (((PoCContactItem)Global.pocUserInSesonArray[i]).Equals(pocContactItem))
                    
{
                        isIn 
= true;
                    }

                }

                
if (!isIn)
                
{
                    treVwSelct.Nodes.Add(
new TreeNode(pocContactItem.GetUserName()));
                    treVwSelct.Nodes[userNumInSelct].ImageIndex 
= 0;
                    treVwSelct.Nodes[userNumInSelct].SelectedImageIndex 
= treVwSelct.Nodes[userNumInSelct].ImageIndex;
                    treVwSelct.Nodes[userNumInSelct].Tag 
= pocContactItem;
                    userNumInSelct
++;
                }

                isIn 
= false;
            }

发现((PoCContactItem)Global.pocUserInSesonArray[i]).Equals(pocContactItem)这个判断语句的结果总是false,说明这个判断语句是错误的,换了另外一种比较方式: pocContactItem == Global.pocUserInSesonArray[i] ,还是不对。

上网找了一下原因,原来操作符==()和实例的Equals()方法,对于引用类型,默认的行为与ReferenceEquals的行为相同,仅有两个对象指向同一个Reference引用的时候才返回true。下面将具体的知识点记录在下:
/****************************************************************************************************/
Equals ,  == ,  ReferenceEquals 都可以用于判断两个对象的个体是不是相等。

a) ReferenceEquals
  ReferenceEquals是Object的静态方法,用于比较两个引用类型的对象是否是对于同一个对象的引用。对于值类型它总是返回false.
  
b) ==是一个可以重载的二元操作符,可以用于比较两个对象是否相等。
  对于内置值类型,==判断的是两个对象的代数值是否相等。它会根据需要自动进行必要的类型转换,并根据两个对象的值是否相等返回true或者false。
  而对于用户定义的值类型,如果没有重载==操作符,==将是不能够使用的。
  对于引用类型,== 默认的行为与ReferenceEquals的行为相同,仅有两个对象指向同一个Reference的时候才返回true。但是.NET Framework中的类很多对==进行了重载,例如String类的==与Equals的行为相同,判断两个字符串的内容是否相等。所以在应用中,对于系统定义的引用类型建议不要使用==操作符,以免程序出现与预期不同的运行结果。
 
  c) Equals 作为Object内置方法,Equals支持对于任意两个CTS对象的比较。
  
  Equals方法对于值类型和引用类型的定义不同,对于值类型,类型相同,并且数值相同(对于struct的每个成员都必须相同),则 Equals返回true,否则返回false。而对于引用类型,默认的行为与ReferenceEquals的行为相同,仅有两个对象指向同一个 Reference的时候才返回true。可以根据需要对Equals进行重载。
/****************************************************************************************************/
知道了原因,问题很快就解决了,我为了简便没有重载Equals方法,而是自己编写了一个比较函数:

        public static bool isEquals(object left, object right)
        
{
            
if ((right == null)||(left == null))
                
return false;

            PoCContactItem leftPoC 
= (PoCContactItem)left;
            PoCContactItem rightPoC 
= (PoCContactItem)right;

            
if ((leftPoC.GetPresence() == rightPoC.GetPresence()) && (leftPoC.GetUserName() == rightPoC.GetUserName()) && (leftPoC.GetUserSipUri() == rightPoC.GetUserSipUri()))
                
return true;
            
return false;
        }
然后将if (((PoCContactItem)Global.pocUserInSesonArray[i]).Equals(pocContactItem))修改为if (isEquals(pocContactItem, Global.pocUserInSesonArray[i]))   ,问题解决。

ps:最上面的的遍历两个ArrayList的算法有点糙,感觉应该有更好看的方法,以后有时间优化一下。
 
js中比较两个对象是否相同的方法(详细) 本文实例讲述了js中比较两个对象是否相同的方法。分享给大家供大家参考,具体代码如下,如有需要可直接复制使用,亲测有效: js代码: data() { return { old: {}, //定义一个装旧数据的对象 flag1: false,//定义一个开关,判断是否一样的唯一标识 }, }; //把装旧表单数据装在一个对象里 this.old = { name: "柠檬", phone: 123456, //手机 阅读详情

相关推荐

3.5.3以太网ETH TC8-PMA物理层测试

英文原版-OA_Automotive_Ethernet_ECU_TestSpecification_Layer_1_100BASE-T1_v3.0.pdf。PMA测试时各个测试项目所进入的测试模式不同,如TX_01对应测试模式1;TX_04对应测试模式5;例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。TX_07对应测试模式5;物理层测试主要分为两部分:IOP测试(包括链接时间,信号质量,线路诊断),PMA测试。

qq_28664971的博客 7697

两个List对象集合比较

两个List对象集合比较 获取相同和不同的数据

qq_48765361的博客 432

企业固定资产管理的SAP实战:FICO模块配置与折旧范围设置详解

本文深入解析了SAP FICO模块中固定资产会计配置的核心实践,重点阐述了折旧范围的设计哲学与配置逻辑。通过详解折旧表、折旧范围、资产分类及折旧码等关键配置步骤,指导企业如何搭建满足多会计准则(如CAS、IFRS)与税务要求的资产管理体系,实现资产购置、折旧计提与报废清理的自动化与精准化。

wdx01234567的博客 728

使用 Stream 流对比两个集合的常用操作分享

在之前的开发中,遇到了这样的需求:记录某个更新操作之前的数据作为日志内容,之后可以供管理员在页面上查看该日志。更新接口拿入参与现在数据库该条数据逐一对比,将不同的部分取出;在更新操作前取出现在数据库的该条数据,更新操作后再取出同一条数据,比较两者的异同。前端入参未经过后端真实性校验,即万一进来的不是同一条数据呢?这样是不可靠的。后端先拿参数去数据库找,如果有这条数据,那么拿出来做对比可以保证更新的是同一条数据。

王二的博客 2306

R以及Rstudio超详细安装教程(包括安装过程中出现的问题)

R安装及Rstudio安装,以及安装中出现的问题

2301_76908257的博客 1万+

Flutter蓝牙开发实战:flutter_blue_plus核心功能与实现原理剖析

本文深入剖析了Flutter蓝牙开发插件flutter_blue_plus的核心功能与实现原理。文章从源码解析入手,详细讲解了蓝牙状态管理、设备扫描、GATT连接、服务发现以及数据读写等关键流程的实现机制,并分享了实战中的性能调优与常见问题解决方案,帮助开发者高效构建跨平台蓝牙应用。

weixin_29014237的博客 444

Java-对比俩个对象相同属性不同值的字段

对比俩个对象相同字段修改前后值的变化 最近做一个系统,系统要求是记录某个人修改的某个字段及这个字段修改前与修改后的数据等一些信息。 工具类不用改,拿走直接用即可。只需改变你的业务代码。 对比工具类: /** * 对比俩个对象相同字段修改前后值的变化 --工具类 * @param obj1 修改前的对象 * @param obj2 修改后的对象 * @param ignoreArr * @return */ public static Map<String, List<Object>&g

P_CLiang的博客 2495

Vue3 + uniapp 踩坑:iOS 真机调试一直报错Maximum call stack size exceeded,和(in promise)MiniProgramError err的解决方法

不是你写错代码,是微信开发工具和 iOS 真机调试的兼容问题。开个空项目都报错,勾个设置就没问题,不是你,是工具的锅。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1267

用Stream流遍历两个集合,对比出数据差异。

今天开发一个需求时,要对A和B两个List集合遍历,并比较出集合A有,而集合B没有的值。 比如说List集合A有’one’,‘two’,‘three’三个值,List集合B有’one’,‘three’两个值。 那么最终打印’two’。 下面我就用stream流来做个例子。 例子中,集合A的泛型为HashMap,集合B的泛型为String。 Stream流中,forEach()方法用于对一个流进行结尾动作,同时对最终过滤后的元素结果进行一个遍历操作。 我们可以在forEach()中直接写入类和其对应方法名,来

硬核编程乐乐的博客 1万+

基于THUCNews数据集bert bert_wwm的新闻文本分类

基于THUCNews数据集bert bert_wwm的新闻文本分类

984

基于共识的捆绑算法CBBA在多无人机多任务调度中的实现

在捆绑过程中,每个无人机根据自己的任务清单和其他无人机的任务清单,确定一个被称为“束”的集合。通过合理的任务分配和无人机协作,CBBA算法能够实现最优的任务调度,提高了多无人机系统的效率和执行能力。在每一轮迭代中,无人机根据自己的当前任务和位置信息将任务清单发送给其他无人机,并接收其他无人机发送过来的任务清单。通过比较其他无人机的任务清单和自身的任务清单,每个无人机可以更新自己的任务分配情况。在这一步中,每个无人机根据自己选择的新任务,更新自身的任务清单,并将更新后的清单发送给其他无人机。

持续更新 1156

实现两个对象的所有属性值比较(集合,数组除外)

对象属性比较(集合,数组不参与比较)

qq_44845473的博客 644

VCAST创建单元测试工程

选择工作目录,后面创建胡UT工程将会生成到这个目录。

qq_42851449的博客 2485

java如何比较两个对象_Java如何比较两个对象

Java如何比较两个对象1 Java如何比较两个对象的介绍Java Object类是所有Java类的超类。默认情况下,所有Java类都实现Object类。Java Object类提供了两个重要的方法来比较Java中的两个对象,即equals() 和hashCode() 方法。在本节中,我们将学习equals() 和hashCode() 方法的工作方式。除此之外,我们还将学习如何将Java中的两个对...

weixin_35712811的博客 2741

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

定义一个接口用来实现两个对象的比较。

定义一个接口用来实现两个对象的比较。 interface CompareObject{     public int compareTo(Object o);   //若返回值是 0 , 代表相等; 若为正数,代表当前对象大;负数代表当前对象小  } 定义一个Circle类。 定义一个ComparableCircle类,继承Circle类并且实现CompareObject接口。在Comparabl...

大哥的叔的博客 2万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

java两个对象属性比较

两个对象进行比较相等,有两种做法: 1,情况一:当仅仅只是判断两个对象是否相等时,只需重写equals()方法即可。这里就不用说明 2.情况二:当除了情况一之外,还需知道是那个属性不同,那么就需要采用类反射,具体代码如下: public static void main(String[] args) { A a = new A(); a.setUserName("a"); a.setPassword("p"); a.setQq("q"); a.setWechat("w"); A b = new

诚的博客 2148

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

JavaScript比较两个对象是否相等

本js代码通过对js对象进行各方面的比较来判断两个对象是否相等

kooky博客 8025

java2个对象比较不同_Java比较两个对象的不同之处

package com.sea.test.utils;import java.beans.PropertyDescriptor;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.la...

weixin_42298352的博客 1494

两个araryList<object>对象比较

两个araryList<object>对象比较

平下上 989

比较两个对象中所有属性值是否相同

比较两个对象中所有属性值是否相同 /** * 比较两个实体属性值,返回一个boolean,true则表时两个对象中的属性值无差异 * @param obj1 进行属性比较的对象1 * @param obj2 进行属性比较的对象2 * @return 属性差异比较结果boolean */ public static boolean co...

爱谁谁博客 8032

比较两个可为null的对象

比较两个可为null的对象相等方法: null==o1?null==o2:o1.equals(o2) 方法在equals中特别实用。

IT小菜的专栏 1449

jquery比较两个对象

//提交的 var sss = { 'name': 1, 'age': 20, 'jieshao': "ccc", 'xxx': '', } //返回的 var ggg = { 'name': 3, 'age': 10, 'jieshao': "ccc", 'xxx': '', } var arr = {}; ...

ersorn 1899

js 比较两个对象数据变化

比较两个对象是否相同: let a = { 'name': "zs", "val": "20", 'pop': "ls", "age": "22" } let b = { 'name': "zs", "val": "20", 'pop': "ls", "age": "22", } function isObjEqual(obj1, obj2) { // Object.getOwnPropertyNames 返回对象所有的属性或对象中属性的个数

smile2333的博客 3538

在JavaScript中如何对两个对象进行深度比较

function recursiveComparison(objA, objB, flag) { for (let key in objA) { // 如果objA的key不存在objB中,比较结果为false if (!objB.hasOwnProperty(key)) flag = false; // 递归调用compareDeeply,进行比较 ...

前路浩浩荡荡,万物皆可期待 2010

C# 7个方法比较两个对象是否相等

比较对象是编程中的一项基本技能,在实际业务中经常碰到,比如在ERP系统中,企业的信息非常重要,每一次更新,都需要比较记录更新前后企业的信息,直接比较通常只能告诉我们它们是否指向同一个内存地址,那我们应该怎么办呢?分享 7 个方法给你!

yangshuquan的专栏 3788

关于比较两个对象属性

泛型主要为了将对象转成相应的类型,可以使用Object t1,t2为需要比较的两对象 返回t是一个新的对象 然后 t1还是原对象 新生成的t为有差异的对象。

tiantiantbtb的博客 529
上一篇: 关于上个在foreach中ArrayList.Remove出错的解释
下一篇: 【转】Carbide.c++ IDE的常用快捷键和技巧
wangleon
博客等级 码龄20年 0粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值