【原创】区分"=="与equals()

==与equals()方法的区别解析
本文整理笔记介绍了“==”和equals()方法的区别。“==”判断两个变量是否引用同一对象,由JVM决定功能和用法;equals()是String类方法,比较内容。使用equals()返回true时,“==”可能返回false,“==”比equals()更原始。

今天整理了一下前段时间学习做的笔记,希望对大家有帮助!

"=="判断的是两个变量是否引用同一个对象,而equals()比较的是内容,equals()是String里的方法。

对象相同:简单地说就是内存里有一个对象,但有两个变量都是指向它,就象一个人有两个名字但是同一个人。所以它的内部结构也就相同,不会出现一个对象不同值的现象。

使用euqals()返回true的两个变量,用"=="可能返回false。因为euqals()返回的是它的值相等,当用"=="比较时,它们的值是相等的。但是"=="比较的是他们的对象是否相同,就会忽略对值的判断,所以就有可能判断为false。

可以这样更深入的理解:"=="是操作符号,所以功能和使用方法是由JVM决定的。equals()是String类的方法,它是使用JVM上的功能。这两个不是同一类东西,可以说"=="比equals()更原始。

@Transactional(rollbackFor = Exception.class) public SyncResult syncData() { SyncResult result = new SyncResult(); result.setStartTime(new Date()); try { // 1. 获取所有源数据 List<DaWeiPrjInfo> sourceData = daWeiDataSyncMapper.getSourceData(); // 2. 获取所有目标数据code List<String> targetCodes = daWeiDataSyncMapper.getTargetCodes(); Map<String, DaWeiPrjInfo> targetMap = new HashMap<>(); if (!targetCodes.isEmpty()) { // 分批查询目标数据 int batchSize = 500; for (int i = 0; i < targetCodes.size(); i += batchSize) { // List<String> batchCodes = targetCodes.subList(i, Math.min(i + batchSize, targetCodes.size())); List<DaWeiPrjInfo> batchData = daWeiDataSyncMapper.getTargetDataByCodes(); batchData.forEach(item -> targetMap.put(item.getCode(), item)); } } // 3. 准备操作数据 List<DaWeiPrjInfo> toInsert = new ArrayList<>(); List<DaWeiPrjInfo> toUpdate = new ArrayList<>(); List<String> updatedIds = new ArrayList<>(); for (DaWeiPrjInfo source : sourceData) { DaWeiPrjInfo target = targetMap.get(source.getCode()); if (target == null) { // 新增数据 prepareForInsert(source); toInsert.add(source); result.incrementInsertCount(); } else if (isDataChanged(source, target)) { // 更新数据 prepareForUpdate(source, target); toUpdate.add(source); updatedIds.add(target.getId()); result.incrementUpdateCount(); } else { result.incrementUnchangedCount(); } } // 4. 执行操作 if (!toInsert.isEmpty()) { batchInsert(toInsert); } if (!toUpdate.isEmpty()) { batchUpdate(toUpdate); } result.setSuccess(true); } catch (Exception e) { result.setSuccess(false); result.setErrorMessage(e.getMessage()); log.error("数据同步失败", e); throw e; } finally { result.setEndTime(new Date()); result.setCostTime(result.getEndTime().getTime() - result.getStartTime().getTime()); log.info("同步结果: {}", result); } return result; } /** * 批量插入数据 */ private void batchInsert(List<DaWeiPrjInfo> list) { int batchSize = 500; for (int i = 0; i < list.size(); i += batchSize) { List<DaWeiPrjInfo> batch = list.subList(i, Math.min(i + batchSize, list.size())); daWeiDataSyncMapper.batchInsert(batch); } } /** * 批量更新数据 */ private void batchUpdate(List<DaWeiPrjInfo> list) { int batchSize = 500; for (int i = 0; i < list.size(); i += batchSize) { List<DaWeiPrjInfo> batch = list.subList(i, Math.min(i + batchSize, list.size())); daWeiDataSyncMapper.batchUpdate(batch); } } /** * 准备插入的数据 */ private void prepareForInsert(DaWeiPrjInfo entity) { entity.setId(UUID.randomUUID().toString()); entity.setDataStatus(1); // 新增状态 entity.setSyncStatus(0); // 未同步 entity.setDataTime(new Date()); entity.setCreateTime(new Date()); entity.setLastUpdateTime(new Date()); } /** * 准备更新的数据 */ private void prepareForUpdate(DaWeiPrjInfo source, DaWeiPrjInfo target) { source.setId(target.getId()); // 保持原ID source.setName(target.getName()); source.setDataStatus(2); // 更新状态 source.setSyncStatus(0); // 重置为未同步 source.setDataTime(new Date()); source.setCreateTime(target.getCreateTime()); // 保持原创建时间 source.setLastUpdateTime(new Date()); if (source.getOpportunityCode() == null) { source.setOpportunityCode(target.getOpportunityCode()); } if (source.getName() == null) { source.setName(target.getName()); } if (source.getKind() == null) { source.setKind(target.getKind()); } if (source.getManagerId() == null) { source.setManagerId(target.getManagerId()); } if (source.getManagerName() == null) { source.setManagerName(target.getManagerName()); } if (source.getCustomerName() == null) { source.setCustomerName(target.getCustomerName()); } if (source.getProductModel() == null) { source.setProductModel(target.getProductModel()); } if (source.getDevelopGroup() == null) { source.setDevelopGroup(target.getDevelopGroup()); } } /** * 判断数据是否发生变化 */ private boolean isDataChanged(DaWeiPrjInfo source, DaWeiPrjInfo target) { return !Objects.equals(source.getOpportunityCode(), target.getOpportunityCode()) || !Objects.equals(source.getName(), target.getName()) || !Objects.equals(source.getKind(), target.getKind()) || !Objects.equals(source.getManagerId(), target.getManagerId()) || !Objects.equals(source.getManagerName(), target.getManagerName()) || !Objects.equals(source.getCustomerName(), target.getCustomerName()) || !Objects.equals(source.getProductModel(), target.getProductModel()) || !Objects.equals(source.getDevelopGroup(), target.getDevelopGroup()); } } 根据这个去做修改,不管是新增或修改了数据 我都只是新增一条数据
最新发布
10-01
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值