commons-lang3-3.6.jar的StringUtils中equals()和equalsIgnoreCase()有什么区别?
what is the difference between equals() and equalsIgnoreCase() in StringUtils of commons-lang3-3.6.jar?
当我使用这两种方法时,我想知道它们的区别,以及equalsIgnoreCase() 是如何忽略两个String 的大小写的。但是我什至没有发现源代码的区别,只是代码的顺序不同。
谁能帮我分析下源码的区别,怎么忽略大小写的?谢谢。
这是源代码:
public static boolean equals(CharSequence cs1, CharSequence cs2) {
if (cs1 == cs2) {
return true;
} else if (cs1 != null && cs2 != null) {
if (cs1.length() != cs2.length()) {
return false;
} else {
return cs1 instanceof String && cs2 instanceof String ? cs1.equals(cs2) : CharSequenceUtils.regionMatches(cs1, false, 0, cs2, 0, cs1.length());
}
} else {
return false;
}
}
public static boolean equalsIgnoreCase(CharSequence str1, CharSequence str2) {
if (str1 != null && str2 != null) {
if (str1 == str2) {
return true;
} else {
return str1.length() != str2.length() ? false : CharSequenceUtils.regionMatches(str1, true, 0, str2, 0, str1.length());
}
} else {
return str1 == str2;
}
}
equalsIgnoreCase
执行以下测试:
- 任一字符串是否为空?如果是,return
str1 == str2
-
str1 == str2
吗?如果是这样,return 正确
- 字符串的长度是否不同?如果是这样,return false
- 使用
CharSequenceUtils
的regionMatches
方法比较两者,第二个参数ignoreCase
,设置为true
您可以找到 regionMatches
here 的源代码。如果 ignoreCase
设置为 true,则该函数在比较字符时会大写字符。
相比之下,equals
调用 regionMatches
并为 ignoreCase
参数设置 false,这将导致 regionMatches
不将字符大写。
equalsIgnoreCase(...) 忽略大小写(大写 o 小写)。 .所以
"HELLO".equalsIgnoreCase("hello")
是真的。
区别在于方法CharSequenceUtils.regionMatches
。第二个参数是ignoreCase
static boolean regionMatches(CharSequence cs, boolean ignoreCase, int thisStart,
CharSequence substring, int start, int length) {
if (cs instanceof String && substring instanceof String) {
return ((String) cs).regionMatches(ignoreCase, thisStart, ((String) substring), start, length);
} else {
// TODO: Implement rather than convert to String
return cs.toString().regionMatches(ignoreCase, thisStart, substring.toString(), start, length);
}
}
在等于中,您会看到字符串相等:示例:
StringUtils.equals("abc", "abc") = true
StringUtils.equals("abc", "ABC") = false
顾名思义,在 equalsIgnoreCase 中尝试比较忽略大小写的字符串相等性:
StringUtils.equalsIgnoreCase("abc", "abc") = true
StringUtils.equalsIgnoreCase("abc", "ABC") = true
当我使用这两种方法时,我想知道它们的区别,以及equalsIgnoreCase() 是如何忽略两个String 的大小写的。但是我什至没有发现源代码的区别,只是代码的顺序不同。 谁能帮我分析下源码的区别,怎么忽略大小写的?谢谢。 这是源代码:
public static boolean equals(CharSequence cs1, CharSequence cs2) {
if (cs1 == cs2) {
return true;
} else if (cs1 != null && cs2 != null) {
if (cs1.length() != cs2.length()) {
return false;
} else {
return cs1 instanceof String && cs2 instanceof String ? cs1.equals(cs2) : CharSequenceUtils.regionMatches(cs1, false, 0, cs2, 0, cs1.length());
}
} else {
return false;
}
}
public static boolean equalsIgnoreCase(CharSequence str1, CharSequence str2) {
if (str1 != null && str2 != null) {
if (str1 == str2) {
return true;
} else {
return str1.length() != str2.length() ? false : CharSequenceUtils.regionMatches(str1, true, 0, str2, 0, str1.length());
}
} else {
return str1 == str2;
}
}
equalsIgnoreCase
执行以下测试:
- 任一字符串是否为空?如果是,return
str1 == str2
-
str1 == str2
吗?如果是这样,return 正确 - 字符串的长度是否不同?如果是这样,return false
- 使用
CharSequenceUtils
的regionMatches
方法比较两者,第二个参数ignoreCase
,设置为true
您可以找到 regionMatches
here 的源代码。如果 ignoreCase
设置为 true,则该函数在比较字符时会大写字符。
相比之下,equals
调用 regionMatches
并为 ignoreCase
参数设置 false,这将导致 regionMatches
不将字符大写。
equalsIgnoreCase(...) 忽略大小写(大写 o 小写)。 .所以
"HELLO".equalsIgnoreCase("hello")
是真的。
区别在于方法CharSequenceUtils.regionMatches
。第二个参数是ignoreCase
static boolean regionMatches(CharSequence cs, boolean ignoreCase, int thisStart,
CharSequence substring, int start, int length) {
if (cs instanceof String && substring instanceof String) {
return ((String) cs).regionMatches(ignoreCase, thisStart, ((String) substring), start, length);
} else {
// TODO: Implement rather than convert to String
return cs.toString().regionMatches(ignoreCase, thisStart, substring.toString(), start, length);
}
}
在等于中,您会看到字符串相等:示例:
StringUtils.equals("abc", "abc") = true
StringUtils.equals("abc", "ABC") = false
顾名思义,在 equalsIgnoreCase 中尝试比较忽略大小写的字符串相等性:
StringUtils.equalsIgnoreCase("abc", "abc") = true
StringUtils.equalsIgnoreCase("abc", "ABC") = true