判断String相等的正确方法

1、现象:问题描述

在业务处理中需要将数据库中的标志位转换为boolean类型:“1”转换为true,其它值转换为false,但在系统运行过程中,该方法有时转换错误。

 

2、关键过程:根本原因分析

查看实现代码如下:

public final boolean convertFlagToBoolean(String flag)

{

       return flag == “1”;

}

发现flag == “1”存在问题,==是用来判断两个变量指向的对象是否是同一个对象,即物理上相等,方法的实际意图只要flag的内容是”1”即可,不一定要是一个对象。

为什么有时转换正常有时错误呢?原来Java中默认字符串对象是不可变的,JVM会维持一个常量池来避免在堆内存中产生重复的String对象。但如果是通过new 方式来构造一个字符串,则JVM是会重新生成String对象,则flag == “1”就会得到false。上面的转换方法传入的Stringnew方式生成的情况下工作正常。

 

3、结论:解决方案及效果

使用String对象的equals方法比较两个字符串相等。

 

4、经验总结:预防措施和规范建议

在使用字符串比较时,需要熟悉Java中对字符串对象的特殊处理和两种对象比较方式的区别:

1==是用来判断两个变量指向的对象是否是同一个对象,即物理上相等;

2equals()方法是判断两个变量指向的对象在逻辑意义上是否相等.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值