如果等于888,则发送邮件
作为一名java程序员,我不知道您是否掌握了一些基本知识。
有时,在长时间检查错误后,结果证明是低级错误。
有时,在某些代码中,这批数据正常工作,但当一批数据发生更改时会发生异常。
有时,您可能会看到一行代码,并想知道:为什么这行代码会出错
今天,让我们谈谈99%的Java程序员已经或将要踩到的六个坑。
我不知道你是否在项目中见过它。一些同事用数字来比较类型的两个参数是否相等
不管怎样,我已经看过了。是这样吗
我的答案是看具体的场景,我不能说它一定是对的或错的。
此时,if==用于确定其是否相等:
返回的结果是否为真
答案是错误的。
为什么是假的
它实际上没有被使用。
缓存在哪里使用
答案在方法中:
如果上述判断改变为:
返回的结果是否为真
回答:这是真的。
相反,使用该方法来判断:
运行结果为真。
假设需要判断当前登录的用户,如果是我们指定的系统管理员,则需要发送电子邮件。系统管理员没有特殊字段ID,其用户ID=888。此值在开发、测试和生产环境中相同。
这一要求很容易实现:
从当前登录用户的上下文中获取用户信息。如果用户信息为空,将直接返回。
如果获取的用户信息不是空的,则接下来确定用户ID是否等于888。
如果等于888,则发送邮件。
如果不等于888,我什么也不做。
在使用系统管理员帐户id=888登录后,我们进行了相关操作,并期待收到电子邮件,但我们发现我们很孤独。
此时,一些朋友可能会说:我看不出有什么问题。
但我想说的是,这段代码有问题。
有什么问题
让我们关注一下它的equals方法:
equals方法的逻辑如下:
该方法首先确定对象a和B的引用是否相等。如果它们相等,则直接返回true。
如果引用不相等,则判断a是否为空。如果a为空,则返回false。
如果a不为空,则调用对象的equals方法以进一步确定值是否相等。
这取决于测试方法。
其equals方法的具体代码如下:
常见的凹坑有:
通常我们会将一些十进制类型的字段定义为,而不是,以避免丢失精度。
这种情况可能发生在使用double时:
然而,执行结果是:
实际结果小于预期结果。
双精度类型的两个参数的减法将转换为二进制,因为双精度的有效位数为16,这将导致小数位数不足的情况,在这种情况下,将发生错误。
常识告诉我们,使用可以避免失去精度。
答案是否定的。
为什么
结果:
这是不科学的。你为什么会失去准确性
在上述段落中有一个描述:
那么,我们如何才能不失去准确性呢
我们可以使用这种方法转换双类型小数,这样可以确保精度不会丢失。
事实上,有更好的方法:
你必须熟悉汉语的用法。
通过对的操作,我们可以实现:遍历集合、过滤数据、排序、判断、转换集合等多功能。
这里我们将重点介绍数据过滤。
在Java 8之前,我们通常按如下方式过滤数据:
通常需要另一套设备来辅助此功能。
但是,如果使用Java 8的函数,代码将变得更简单,例如:
代码简化且完美。
但如果修改过滤后的数据:
您可能只想修改过滤后的数据,但实际上,您将一起修改元素数据。
你感到惊讶吗
根本原因是在过滤后的集合中,保存了对象的引用,而引用只有一条数据。
换句话说,只要引用对象的值在一个位置修改,其他位置也将同步修改。
如下图所示:
之后,提供和的功能。
自动打包意味着JDK将自动将基本类型更改为打包类型。
例如:
相当于:
自动解包意味着JDK将自动将包类型转换为基本类型。
例如:
相当于:
然而,在实际工作中,当我们使用自动开箱时,我们经常忘记判断空位,导致异常。
很多时候,我们需要计算传入数据,例如:
如果传入空值:
将直接报告错误。
有时,我们定义的方法是基本类型,但实际上已上载到包装器类中,例如:
如果add方法报告异常,您可能会感到困惑。int类型中如何发生空指针异常
官方JDK给出了答案。
此方法替换每个匹配字符串。
有两种方法。
例如,替换普通字符串:
替换为正则表达式:
但是,请注意不要使用以下措辞:
这种书写方式将导致字符串不可替代。
有一个小问题。如果我只想替换第一个匹配字符串呢
此时,您可以使用以下方法:
说实话,这里的内容很基本,但越基本的东西,就越容易不小心失去荆州,踩在坑上。
最后,统计数据显示,没有踩过这些坑的学生,请举手。
这一要求很容易实现:
发表评论