commons-lang & commons-lang3 的区别
官方地址:https://commons.apache.org/proper/commons-lang/
about commons-lang3 : https://commons.apache.org/proper/commons-lang/article3_0.html
CharSequence(inteface)& String (class)
-
类层级结构
CharSequence
是一个接口
,定义了表示字符序列的通用操作,包括获取字符长度、获取指定位置的字符等。String
是CharSequence
接口的一个实现类
,它是不可变的字符序列,提供了丰富的字符串操作方法。
-
可变性
CharSequence
表示的字符序列可以是可变的,即可以修改其内容。例如,StringBuilder
和StringBuffer
都是可变的字符序列,它们实现了CharSequence
接口。String
是不可变的字符序列,一旦创建就不能修改其中的字符内容。如果需要对字符串进行修改,每次修改都会创建一个新的字符串对象。
-
使用场景
CharSequence
适用于需要处理字符序列的通用情况,可以接受任何实现了该接口的对象作为参数,包括String
、StringBuilder
、StringBuffer
等。String
适用于需要处理不可变字符串的情况,它提供了丰富的字符串操作方法,例如字符串拼接、截取、替换等
👊 vs equals()
commons-lang
和 commons-lang3
中的 equals
方法在逻辑层面上存在一些区别。下面是对它们的区别进行逐步解释:
-
commons-lang3
的equals
方法:- 首先,它会检查两个参数
cs1
和cs2
是否引用同一个对象,即内存地址是否相同。如果相同,直接返回true
,表示两个对象相等。 - 接下来,它会检查两个参数是否都不为
null
。如果其中一个参数为null
,则返回false
,表示两个对象不相等。 - 如果两个参数都不为
null
,则进一步判断它们的长度是否相等。如果长度不相等,返回false
,表示两个对象不相等。 - 如果长度相等,继续判断两个参数的类型是否都为
String
。如果是String
类型,调用cs1.equals(cs2)
方法来比较两个字符串是否相等。 - 如果两个参数的类型不都为
String
,则通过逐个比较字符的方式来判断两个字符序列是否相等。如果存在不相等的字符,返回false
,表示两个对象不相等。 - 如果所有字符都相等,返回
true
,表示两个对象相等。
- 首先,它会检查两个参数
-
commons-lang
的equals
方法:- 首先,它会检查
str1
是否为null
。如果为null
,则检查str2
是否也为null
。如果两个参数都为null
,返回true
,表示两个对象相等。 - 如果
str1
不为null
,则调用str1.equals(str2)
方法来比较两个字符串是否相等。
- 首先,它会检查
commons-lang3
的 equals
方法在处理字符序列时更加细致和全面。它考虑了对象引用、长度、类型和字符逐个比较等因素,以确定两个字符序列是否相等。而 commons-lang
的 equals
方法则更加简洁,只关注字符串对象的比较,并且使用了短路逻辑来处理 null
值的情况。
💡 综上所述,如果你需要比较字符序列而不仅仅是字符串对象,或者需要更多的灵活性和详细的比较逻辑,推荐使用 commons-lang3
的 equals
方法。如果只需要比较字符串对象,并且希望使用更简洁的代码,可以使用 commons-lang
的 equals
方法。
👊 vs isEmpty()
commons-lang
和 commons-lang3
中的 isEmpty
方法在逻辑层面上存在一些区别。下面是对它们的区别进行逐步解释:
-
commons-lang3
的isEmpty
方法:- 首先,它会检查参数
cs
是否为null
。如果为null
,或者字符序列的长度为 0,即没有任何字符,就返回true
,表示字符序列为空。 - 如果参数
cs
不为null
,且字符序列的长度不为 0,就返回false
,表示字符序列不为空。
- 首先,它会检查参数
-
commons-lang
的isEmpty
方法:- 它只接受
String
类型的参数,而不是通用的字符序列CharSequence
。 - 首先,它会检查参数
str
是否为null
。如果为null
,或者字符串的长度为 0,就返回true
,表示字符串为空。 - 如果参数
str
不为null
,且字符串的长度不为 0,就返回false
,表示字符串不为空。
- 它只接受
commons-lang3
的 isEmpty
方法更通用,可以接受任意的字符序列类型作为参数,并判断字符序列是否为空。而 commons-lang
的 isEmpty
方法只适用于字符串类型,并且使用了短路逻辑来处理 null
值和空字符串的情况。
💡 综上所述,如果你需要判断通用的字符序列是否为空,推荐使用 commons-lang3
的 isEmpty
方法。如果只需要判断字符串是否为空,并且希望使用更简洁的代码,可以使用 commons-lang
的 isEmpty
方法。
👊 vs isNotBlank()
commons-lang
和 commons-lang3
中的 isNotBlank
方法在逻辑层面上也存在一些区别。下面是对它们的区别进行逐步解释:
-
commons-lang3
的isNotBlank
方法:- 它会调用
isBlank
方法来判断字符序列是否为空白。 - 如果字符序列不为空白(即
isBlank
返回false
),则返回true
,表示字符序列不为空白。 - 如果字符序列为空白(即
isBlank
返回true
),则返回false
,表示字符序列为空白。
- 它会调用
-
commons-lang
的isNotBlank
方法:- 它只接受
String
类型的参数,而不是通用的字符序列CharSequence
。 - 它会调用
isBlank
方法来判断字符串是否为空白。 - 如果字符串不为空白(即
isBlank
返回false
),则返回true
,表示字符串不为空白。 - 如果字符串为空白(即
isBlank
返回true
),则返回false
,表示字符串为空白。
- 它只接受
commons-lang3
的 isNotBlank
方法更通用,可以接受任意的字符序列类型作为参数,并判断字符序列是否不为空白。而 commons-lang
的 isNotBlank
方法只适用于字符串类型,并且使用了短路逻辑来处理 null
值、空字符串和空白字符串的情况。
💡 综上所述,,如果你需要判断通用的字符序列是否不为空白,推荐使用 commons-lang3
的 isNotBlank
方法。如果只需要判断字符串是否不为空白,并且希望使用更简洁的代码,可以使用 commons-lang
的 isNotBlank
方法。
👊 vs isNotEmpty()
commons-lang
和 commons-lang3
中的 isNotEmpty
方法在逻辑层面上也存在一些区别。下面是对它们的区别进行逐步解释:
-
commons-lang3
的isNotEmpty
方法:- 它会调用
isEmpty
方法来判断字符序列是否为空。 - 如果字符序列不为空(即
isEmpty
返回false
),则返回true
,表示字符序列不为空。 - 如果字符序列为空(即
isEmpty
返回true
),则返回false
,表示字符序列为空。
- 它会调用
-
commons-lang
的isNotEmpty
方法:- 它只接受
String
类型的参数,而不是通用的字符序列CharSequence
。 - 它会调用
isEmpty
方法来判断字符串是否为空。 - 如果字符串不为空(即
isEmpty
返回false
),则返回true
,表示字符串不为空。 - 如果字符串为空(即
isEmpty
返回true
),则返回false
,表示字符串为空。
- 它只接受
commons-lang3
的 isNotEmpty
方法更通用,可以接受任意的字符序列类型作为参数,并判断字符序列是否不为空。而 commons-lang
的 isNotEmpty
方法只适用于字符串类型,并且使用了短路逻辑来处理 null
值和空字符串的情况。
💡 综上所述,如果你需要判断通用的字符序列是否不为空,推荐使用 commons-lang3
的 isNotEmpty
方法。如果只需要判断字符串是否不为空,并且希望使用更简洁的代码,可以使用 commons-lang
的 isNotEmpty
方法。
最后附一张VS表
下面是一个简单的表格,用于区分 CharSequence
和 String
的特点:
特点 | CharSequence | String |
---|---|---|
类型层次结构 | 接口 | 具体类 |
可变性 | 可以是可变的或不可变的 | 不可变 |
字符内容修改 | 可以修改 | 不可修改 |
实现类示例 | StringBuilder、StringBuffer等 | N/A |
使用场景 | 通用字符序列处理 | 不可变字符串处理 |
方法丰富度 | 较少 | 丰富 |
选择使用哪个类型取决于具体的需求和场景。