Java Android TextUtils isEmpty vs String.isEmpty

Java Android TextUtils isEmpty vs String.isEmpty,java,android,Java,Android,TextUtils.isEmpty(string)和string.isEmpty之间有什么区别 两者都执行相同的操作 使用TextUtils.isEmpty(string)是否有利?是的,首选TextUtils.isEmpty(string) 对于string.isEmpty(),空字符串值将抛出NullPointerException TextUtils将始终返回布尔值 在代码中,前者只是简单地加上一个空检查 return string == null || string.length()

TextUtils.isEmpty(string)
string.isEmpty
之间有什么区别

两者都执行相同的操作


使用
TextUtils.isEmpty(string)
是否有利?

是的,首选
TextUtils.isEmpty(string)


对于
string.isEmpty()
,空字符串值将抛出
NullPointerException

TextUtils
将始终返回布尔值

在代码中,前者只是简单地加上一个空检查

return string == null || string.length() == 0;

类内
TextUtils

public static boolean isEmpty(@Nullable CharSequence str) {
    if (str == null || str.length() == 0) {
        return true;
    } else {
        return false;
    }
}
检查字符串长度是否为零以及字符串是否为空,以避免引发
NullPointerException

在类中
String

public boolean isEmpty() {
    return count == 0;
}
检查字符串长度是否仅为零,如果您尝试使用该字符串且该字符串为空,则可能会导致
NullPointerException

查看文档

对于下列情况,他们规定:

布尔值
isEmpty() 当且仅当length()为0时返回true

对于以下内容,文档说明:

公共静态布尔值isEmpty(CharSequence str)

如果字符串为null或长度为0,则返回true

因此,主要的区别在于,使用TextUtils.isEmpty,您不关心或不需要检查字符串是否为空引用

在另一种情况下是的。

TextUtils.isEmpty()
在Android SDK中更好,因为它有内部空检查,所以您不需要在自己检查字符串的空之前检查字符串的空

但是对于Kotlin,您可以使用
String?.isEmpty()
String?.isNotEmpty()
而不是
TextUtils.isEmpty()
!TextUtils.isEmpty()
,它将更便于阅读

因此,我认为最好在Kotlin中使用
String?.isEmpty()
,在Android Java SDK中使用
TextUtils.isEmpty()

String?.isNullOrEmpty

可能就是您想要的

您知道,您可以随时查看这两种方法的实现,自己在几秒钟内找出差异…TextUtils源代码:@RuchirBaronia,意思是
TextUtils.isEmpty(字符串)
还要检查
String
对象是否为
null
,如果您尝试使用该
String
您没有得到
NullPointerException
@ahmedghanayem不,我是问板球为什么写String#isEmpty而不是String.isEmpty,但是这个链接为我澄清了这一点。我意识到我可以简单地使用变量而不是类来避免进一步的混淆“总是首选”是一个强有力的短语。对于不应为
null
的引用,实际上最好使用一种在应用程序处于不一致状态时会立即失败的方法,而不是继续假设“
null
相当于一个空字符串”并在以后某个不特定的点失败。@cricket\u 007,因此,如果您确实得到一个空字符串,最好立即了解它,而不是用
TextUtils.isEmpty
来掩盖问题。当使用字符串时,您需要
TextUtils
,而您确实希望字符串可以
null
,例如,因为它们是使用API从一些
null
返回的。也许我只是很愚蠢,但为什么他们不只是这样做:如果使用TextUtils.isEmpty()返回{str str==null | str length()=0;}即使在运行测试时为空,也返回false。它需要静态模拟。如果您使用的是Kotlin,请改用isNullOrBlank()或isNullOrEmpty()方法。测试不需要任何模拟。这是一个java问题。