首页 > 编程语言 >【Java】数据类型隐式判断缺陷修复

【Java】数据类型隐式判断缺陷修复

时间:2022-11-26 12:07:44浏览次数:38  
标签:判断 Java String 数据类型 equals Long id 隐式

公司之前有一个与第三方团队合作开发的项目,由于过程沟通出现问题,导致整合测试时出现较多问题。其中有一个最经典的就是关于数据类型隐式判断的缺陷修复,追查代码用了2天的时间,后来发现影响范围过大所以没有进行彻底修复(时间、成本包不住)只做了适配处理,下面将说一下大致的情况。

A:主表、B:子表,其中A.id为A表的主键且字段类型是bigint,B.aid为A.id的外键但是B.aid数据类型是varchar类型。

为什么会存在这种数据类型不一致的情况呢?主要有两个原因:

  1. 跟远程团队之间沟通不畅,管理过程没有有效的沟通机制,同时审查制度没有落实到位为主要原因;
  2. 其次,项目周期过长,功能经过几轮同事接手,交接又未能交接清楚;​

因为数据库中主表id字段数据类型为bigint,子表aid字段数据类型为varchar,因此Java实体中主表实体id的数据类型为Long,而子表实体中aid对应的数据类型为String。好巧不巧,在Java中Long类型是可以通过“equals”和“==”来进行判断,同事们在编写复杂业务逻辑时关于两字段判断的时候一看到String字段触发的判断想都不用想就直接用“equals”来判断,就会出现:

if(aId.equals(id)){
......
}

//对应的数据类型判断就是
if(String.equals(Long)){
......
}

以上写法在IDE中是不会错误提示的,而实际上在编译器层面上也是可以编译通过的。

但实际上数据在流转到这个判断时就会全部判“false”,因为“equals”方法是不会做隐式转换的,所以两个数据类型都不同的情况下是无法进行判断的。所以本次这种情况,最低成本的修改方式是:

if(String.valueOf(Long).equals(String))

先用String.valueOf转换成String再做比较。反之若要判断大小,则将String转换为Long之后再做比较。

标签:判断,Java,String,数据类型,equals,Long,id,隐式
From: https://blog.51cto.com/u_15761576/5888786

相关文章

  • Java Web中requset,session,application 的作用域及区别
    三者概述requset概述:request是表示一个请求,只要发出一个请求就会创建一个request用处:常用于服务器间同一请求不同页面之间的参数传递,常应用于表单的控件值传递。sessio......
  • 零基础自学javase黑马课程第十六天
    零基础自学javase黑马课程第十六天✨欢迎关注......
  • 零基础自学javase黑马课程第十四天
    零基础自学javase黑马课程第十四天✨欢迎关注......
  • JavaScript 读写剪切板
    浏览器环境下,JavaScript读写剪切板读取剪切板varp=navigator.clipboard.readText();p.then(function(clipText){console.log(clipText);//剪贴板内容});......
  • Java lambda表达式基本使用
    代码示例:java.lambda.LambdaExpression1本质lambda表达式本质上是对匿名内部类实例的一种简化写法。1.1案例有以下List<Integer>对象:List<Integer>list=Arra......
  • Java lambda表达式的使用注意点
    0捕获自由变量为了使lambda表达式看起来更像是函数式编程,可以在函数内部直接访问外部变量。lambda表达式具有一个特殊的能力,它可以捕获自由变量。自由变量指的是lambda......
  • Java方法引用和构造器引用详细解释
    1什么是方法/构造器引用简单来说,方法引用是对lambda表达式的一种更加简便的写法。所谓引用,就是对当前已存在的一段代码的借用。方法引用则是隐式借用已经存在的方法作......
  • 小新学Java11
    一、异常1.1异常概念异常︰指的是程序在执行过程中,出现的非正常的情况,最终会导致JVM的非正常停止。在Java等面向对象的编程语言中,异常本身是一个类,产生异常就是创建异常......
  • 为什么要使用Java Stream API?
    Stream是Java8提供的一种更加简便的,对集合类型数据结构的处理API。这里的集合类型数据结构包括各种数组(int[]/String[]等),也包括Collection和Map等实现类。1传统方式操作......
  • 深入剖析Java Stream底层源码
    1Stream的使用在深入学习Stream的本质之前,我们需要先熟悉Stream的使用规则。对Stream有了整体的认识之后,才能更好的理解它的本质。1.1使用步骤使用Stream只需要遵循3......