【六袆 - apache】commons-lang & commons-lang3 的区别;CharSequence& String的区别;StringUtils的工具类

commons-lang & commons-lang3 的区别

  • CharSequence(inteface)& String (class)
  • vs equals()
  • vs isEmpty()
  • vs isNotBlank()
  • vs isNotEmpty()
  • 最后附一张VS表

官方地址: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 是一个接口,定义了表示字符序列的通用操作,包括获取字符长度、获取指定位置的字符等。
    • StringCharSequence 接口的一个实现类,它是不可变的字符序列,提供了丰富的字符串操作方法。
  • 可变性

    • CharSequence 表示的字符序列可以是可变的,即可以修改其内容。例如,StringBuilderStringBuffer 都是可变的字符序列,它们实现了 CharSequence 接口。
    • String 是不可变的字符序列,一旦创建就不能修改其中的字符内容。如果需要对字符串进行修改,每次修改都会创建一个新的字符串对象。
  • 使用场景

    • CharSequence 适用于需要处理字符序列的通用情况,可以接受任何实现了该接口的对象作为参数,包括 StringStringBuilderStringBuffer 等。
    • String 适用于需要处理不可变字符串的情况,它提供了丰富的字符串操作方法,例如字符串拼接、截取、替换等

vs equals()

commons-langcommons-lang3 中的 equals 方法在逻辑层面上存在一些区别。下面是对它们的区别进行逐步解释:

  1. commons-lang3equals 方法:

    • 首先,它会检查两个参数 cs1cs2 是否引用同一个对象,即内存地址是否相同。如果相同,直接返回 true,表示两个对象相等。
    • 接下来,它会检查两个参数是否都不为 null。如果其中一个参数为 null,则返回 false,表示两个对象不相等。
    • 如果两个参数都不为 null,则进一步判断它们的长度是否相等。如果长度不相等,返回 false,表示两个对象不相等。
    • 如果长度相等,继续判断两个参数的类型是否都为 String。如果是 String 类型,调用 cs1.equals(cs2) 方法来比较两个字符串是否相等。
    • 如果两个参数的类型不都为 String,则通过逐个比较字符的方式来判断两个字符序列是否相等。如果存在不相等的字符,返回 false,表示两个对象不相等。
    • 如果所有字符都相等,返回 true,表示两个对象相等。
  2. commons-langequals 方法:

    • 首先,它会检查 str1 是否为 null。如果为 null,则检查 str2 是否也为 null。如果两个参数都为 null,返回 true,表示两个对象相等。
    • 如果 str1 不为 null,则调用 str1.equals(str2) 方法来比较两个字符串是否相等。

commons-lang3equals 方法在处理字符序列时更加细致和全面。它考虑了对象引用、长度、类型和字符逐个比较等因素,以确定两个字符序列是否相等。而 commons-langequals 方法则更加简洁,只关注字符串对象的比较,并且使用了短路逻辑来处理 null 值的情况。

综上所述,如果你需要比较字符序列而不仅仅是字符串对象,或者需要更多的灵活性和详细的比较逻辑,推荐使用 commons-lang3equals 方法。如果只需要比较字符串对象,并且希望使用更简洁的代码,可以使用 commons-langequals 方法。

vs isEmpty()

commons-langcommons-lang3 中的 isEmpty 方法在逻辑层面上存在一些区别。下面是对它们的区别进行逐步解释:

  1. commons-lang3isEmpty 方法:

    • 首先,它会检查参数 cs 是否为 null。如果为 null,或者字符序列的长度为 0,即没有任何字符,就返回 true,表示字符序列为空。
    • 如果参数 cs 不为 null,且字符序列的长度不为 0,就返回 false,表示字符序列不为空。
  2. commons-langisEmpty 方法:

    • 它只接受 String 类型的参数,而不是通用的字符序列 CharSequence
    • 首先,它会检查参数 str 是否为 null。如果为 null,或者字符串的长度为 0,就返回 true,表示字符串为空。
    • 如果参数 str 不为 null,且字符串的长度不为 0,就返回 false,表示字符串不为空。

commons-lang3isEmpty 方法更通用,可以接受任意的字符序列类型作为参数,并判断字符序列是否为空。而 commons-langisEmpty 方法只适用于字符串类型,并且使用了短路逻辑来处理 null 值和空字符串的情况。

综上所述,如果你需要判断通用的字符序列是否为空,推荐使用 commons-lang3isEmpty 方法。如果只需要判断字符串是否为空,并且希望使用更简洁的代码,可以使用 commons-langisEmpty 方法。

vs isNotBlank()

commons-langcommons-lang3 中的 isNotBlank 方法在逻辑层面上也存在一些区别。下面是对它们的区别进行逐步解释:

  1. commons-lang3isNotBlank 方法:

    • 它会调用 isBlank 方法来判断字符序列是否为空白。
    • 如果字符序列不为空白(即 isBlank 返回 false),则返回 true,表示字符序列不为空白。
    • 如果字符序列为空白(即 isBlank 返回 true),则返回 false,表示字符序列为空白。
  2. commons-langisNotBlank 方法:

    • 它只接受 String 类型的参数,而不是通用的字符序列 CharSequence
    • 它会调用 isBlank 方法来判断字符串是否为空白。
    • 如果字符串不为空白(即 isBlank 返回 false),则返回 true,表示字符串不为空白。
    • 如果字符串为空白(即 isBlank 返回 true),则返回 false,表示字符串为空白。

commons-lang3isNotBlank 方法更通用,可以接受任意的字符序列类型作为参数,并判断字符序列是否不为空白。而 commons-langisNotBlank 方法只适用于字符串类型,并且使用了短路逻辑来处理 null 值、空字符串和空白字符串的情况。

综上所述,,如果你需要判断通用的字符序列是否不为空白,推荐使用 commons-lang3isNotBlank 方法。如果只需要判断字符串是否不为空白,并且希望使用更简洁的代码,可以使用 commons-langisNotBlank 方法。

vs isNotEmpty()

commons-langcommons-lang3 中的 isNotEmpty 方法在逻辑层面上也存在一些区别。下面是对它们的区别进行逐步解释:

  1. commons-lang3isNotEmpty 方法:

    • 它会调用 isEmpty 方法来判断字符序列是否为空。
    • 如果字符序列不为空(即 isEmpty 返回 false),则返回 true,表示字符序列不为空。
    • 如果字符序列为空(即 isEmpty 返回 true),则返回 false,表示字符序列为空。
  2. commons-langisNotEmpty 方法:

    • 它只接受 String 类型的参数,而不是通用的字符序列 CharSequence
    • 它会调用 isEmpty 方法来判断字符串是否为空。
    • 如果字符串不为空(即 isEmpty 返回 false),则返回 true,表示字符串不为空。
    • 如果字符串为空(即 isEmpty 返回 true),则返回 false,表示字符串为空。

commons-lang3isNotEmpty 方法更通用,可以接受任意的字符序列类型作为参数,并判断字符序列是否不为空。而 commons-langisNotEmpty 方法只适用于字符串类型,并且使用了短路逻辑来处理 null 值和空字符串的情况。

综上所述,如果你需要判断通用的字符序列是否不为空,推荐使用 commons-lang3isNotEmpty 方法。如果只需要判断字符串是否不为空,并且希望使用更简洁的代码,可以使用 commons-langisNotEmpty 方法。

最后附一张VS表

下面是一个简单的表格,用于区分 CharSequenceString 的特点:

特点 CharSequence String
类型层次结构 接口 具体类
可变性 可以是可变的或不可变的 不可变
字符内容修改 可以修改 不可修改
实现类示例 StringBuilder、StringBuffer等 N/A
使用场景 通用字符序列处理 不可变字符串处理
方法丰富度 较少 丰富

选择使用哪个类型取决于具体的需求和场景。

你可能感兴趣的:(#,Framework,commons-lang,apache)