官方地址:https://commons.apache.org/proper/commons-lang/
about commons-lang3 : https://commons.apache.org/proper/commons-lang/article3_0.html
类层级结构
CharSequence
是一个接口
,定义了表示字符序列的通用操作,包括获取字符长度、获取指定位置的字符等。String
是 CharSequence
接口的一个实现类
,它是不可变的字符序列,提供了丰富的字符串操作方法。可变性
CharSequence
表示的字符序列可以是可变的,即可以修改其内容。例如,StringBuilder
和 StringBuffer
都是可变的字符序列,它们实现了 CharSequence
接口。String
是不可变的字符序列,一旦创建就不能修改其中的字符内容。如果需要对字符串进行修改,每次修改都会创建一个新的字符串对象。使用场景
CharSequence
适用于需要处理字符序列的通用情况,可以接受任何实现了该接口的对象作为参数,包括 String
、StringBuilder
、StringBuffer
等。String
适用于需要处理不可变字符串的情况,它提供了丰富的字符串操作方法,例如字符串拼接、截取、替换等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
方法。
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
方法。
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
方法。
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
方法。
下面是一个简单的表格,用于区分 CharSequence
和 String
的特点:
特点 | CharSequence | String |
---|---|---|
类型层次结构 | 接口 | 具体类 |
可变性 | 可以是可变的或不可变的 | 不可变 |
字符内容修改 | 可以修改 | 不可修改 |
实现类示例 | StringBuilder、StringBuffer等 | N/A |
使用场景 | 通用字符序列处理 | 不可变字符串处理 |
方法丰富度 | 较少 | 丰富 |
选择使用哪个类型取决于具体的需求和场景。