StringUtils在commons-lang3和commons-lang中的区别

lang3是Apache Commons 团队发布的工具包,要求jdk版本在1.5以上,相对于lang来说完全支持java5的特性,废除了一些旧的API。该版本无法兼容旧有版本,于是为了避免冲突改名为lang3。

总结:

对于其源码的分析,其内部方法请求参数由String变为CharSequence。CharSequence是一个字符序列的接口,其中定义了一些常用的如length()、subSequence()等方法,String也实现了这个接口。
当然在String里用到的都是subString(),实际上String也实现了subSequence()这个方法,只是直接指向了subString()。lang3中使用CharSequence最大的好处就是令这些方法用处更加广泛,不止局限于String,
其他一些实现了该接口的类也可以使用StringUtils中的这些方法去进行一些操作。其NIO内部类中也广泛用到此方式。

在lang中,第一步是先判断str1是否为空,而在lang3中,第一步则是先判断两个对象是否相同。这个不难理解,如果两个对象的地址相同,那么它们指向的就是同一个对象,内容肯定相同。
在lang3中,还加入了一些同时判断多个参数的方法,可以看到实际上是将参数列表放入一个CharSequence数组中,然后遍历调用之前的isEmpty等方法。判断blank也有类似的方法。
很多方法String本身就有?为什么还要用StringUtils提供的呢?抛开参数类型不谈,我们可以看到,StringUtils中的方法大多都做了空校验,如果为空时会返回Null或者空串,而String本身的方法在很多传入参数或对象本身为空的时候都会报空指针错误。

在CharSequence源码里面有实现的方法,只是返回值前面加了个default。Java8的新特性,可以在接口里面定义default方法,从而使得接口在进行扩展的时候,不会破坏与接口相关的实现类代码。

posted @ 2019-07-29 10:27  CHANGEMAX  阅读(1188)  评论(0编辑  收藏  举报