StringUtils的坑,关于StringUtils.join传入的是基本类型的数组返回乱码

前提,引入的是org.apache.commons.lang3下的StringUtils

今天发现了一个StringUtils巨大的坑,害得我调试了太久,连源码都看了好多遍,终于发现了这个问题!!

先上代码:


int[] array = {1, 2, 3, 4};
System.out.println(StringUtils.join(array,","));

我期望输出也是理论输出的是 :1,2,3,4

实际输出:[I@36aa7bc2,

然后我进源码看:

public static String join(int[] array, char separator) {
        return array == null ? null : join((int[])array, separator, 0, array.length);
}

public static String join(int[] array, char separator, int startIndex, int endIndex) {
        if (array == null) {
            return null;
        } else {
            int noOfItems = endIndex - startIndex;
            if (noOfItems <= 0) {
                return "";
            } else {
                StringBuilder buf = new StringBuilder(noOfItems * 16);

                for(int i = startIndex; i < endIndex; ++i) {
                    if (i > startIndex) {
                        buf.append(separator);
                    }

                    buf.append(array[i]);
                }

                return buf.toString();
            }
        }
    }

有关的方法我已经贴出来了,而且就照着这个方法运行下去,都能获取到正确的值。

这就让人很无奈了,然后接下来让我经历了永生难忘的一幕,大家请看这个方法:

@SafeVarargs
public static <T> String join(T... elements) {
    return join((Object[])elements, (String)null);
}

这个也是可变参数方法StringUtils里面的方法,原谅我真的想骂人了。

所以我的问题就出现了,尽管 StringUtils提供了支持基本类型数组(例如int,byte,char)的join方法,可是,他同时也提供了一个可变参数的方法,然后悲剧来了。所有的基本类型数组,都统一的进入了可变参数方法!!但是所有的包装类型数组就能进入正常的方法。

解决方案:

1.把基本类型数组换为对应的包装类型的数组

2.自己写个方法实现吧

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

糖醋排骨不拿拿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值