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

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

背景

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

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

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

你期望的输出是:10111101CNY1687624332000

但实际的输出确是:1203CNY1687624332000

代码

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;
    }
}

出错的写法

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);
}

正确的写法

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);
}

本篇文章如有帮助到您,请给「翎野君」点个赞,感谢您的支持。


目录
相关文章
|
6月前
|
存储 C语言 C++
截断&&整型提升&&算数转换
截断&&整型提升&&算数转换
|
6月前
整数常量
整数常量。
39 0
|
6月前
|
存储 Shell C语言
【C/C++ 字符串与整型转换函数】探索C语言中的字符串和整型之间的转换函数
【C/C++ 字符串与整型转换函数】探索C语言中的字符串和整型之间的转换函数
70 0
|
6月前
|
编译器 C语言 C++
整形提升和算数转换
整形提升和算数转换
39 0
|
6月前
|
C++
(C++)字符串相加
(C++)字符串相加
73 0
隐式类型转换 算术转换 操作符的属性
隐式类型转换 算术转换 操作符的属性
56 0
|
测试技术
变量、数据类型和运算符
变量、数据类型和运算符
|
C语言 索引
操作符续(整型提升与算术转换)
操作符续(整型提升与算术转换)
85 0
【C++之重载类型转换运算符】复数与 double 数相加
【C++之重载类型转换运算符】复数与 double 数相加
|
存储 Java
02-进制转换、基本数据类型和运算符
10进制转N进制:整数部分除N取余,小数部分乘N取整 N进制转10进制:从右向左,逐位乘N的(0到最左位)相加 不同进制转换可以借助中间10进制进行转换
94 0
02-进制转换、基本数据类型和运算符