字符串拼接时数值类型相加引发的问题

2023-07-01 14:43:14 浏览数 (1)

背景

多个字段再进行,字符串拼接的过程中,需要格外留意待拼接的字段的类型,如果是数值类型的话,则需要小心出现bug。

如:String str = item.getSkuId() item.getSkuType() item.getClassicId() item.getCurrency() item.getStartTime() ;

各个字段的值分别是:101、1、1101、CNY、1687624332000

你期望的输出是:10111101CNY1687624332000

但实际的输出确是:1203CNY1687624332000

代码

代码语言:javascript复制
public class ClassicPriceSettingReqDto {

    private Integer skuId;

    private Byte skuType;

    private Long classicId;

    private String currency;

    private Long startTime;

    public Integer getSkuId() {
        return skuId;
    }

    public Byte getSkuType() {
        return skuType;
    }

    public Long getClassicId() {
        return classicId;
    }

    public String getCurrency() {
        return currency;
    }

    public Long getStartTime() {
        return startTime;
    }
}

出错的写法

代码语言:javascript复制
Set<String> existsDataSet = new HashSet<>();
for (ClassicPriceSettingReqDto item : reqDtoList) {
    // 按照指定字段进行去重,前三个字段均为数值类型,而我想要的是字符串的拼接效果
    String str = item.getSkuId()   item.getSkuType()   item.getClassicId()   item.getCurrency()   item.getStartTime() ;
    if (existsDataSet.contains(str)) {
        log.warn("This data already exists {}", str);
        continue;
    }
    existsDataSet.add(str);
    
}

正确的写法

代码语言:javascript复制
Set<String> existsDataSet = new HashSet<>();
for (ClassicPriceSettingReqDto item : reqDtoList) {
    // 按照指定字段进行去重
    String str = item.getSkuId()   "-"   item.getSkuType()   "-"   item.getClassicId()   "-"   item.getCurrency()   "-"   item.getStartTime() ;
    if (existsDataSet.contains(str)) {
        log.warn("This data already exists {}", str);
        continue;
    }
    existsDataSet.add(str);
    
}

0 人点赞