我创建了一个"Color Chooser",其中包含三个文本框,用户可以在其中定义rgb值.
要检查输入的值是否正确(仅0到255之间的数字)我正在使用以下内容:
public Color getColor() {
if (tfRed.getText().equals("") || tfGreen.getText().equals("") || tfBlue.getText().equals("")) {
return new Color(0, 0, 0, 0);
} else {
if (tfRed.getText().matches("\\d+") && tfGreen.getText().matches("\\d+") && tfBlue.getText().matches("\\d+")) {
// ...
} else {
return new Color(0, 0, 0, 0);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我问的是:使用它更好String.isEmpty()吗?我从来没有找到令人满意的答案,我一直想知道是否有任何不同.
Cha*_*win 26
我认为isEmpty()效率更高一点.但是,智能编译器equals("")无论如何都可以优化呼叫.来自OpenJDK源:
671 public boolean isEmpty() {
672 return count == 0;
673 }
1013 public boolean equals(Object anObject) {
1014 if (this == anObject) {
1015 return true;
1016 }
1017 if (anObject instanceof String) {
1018 String anotherString = (String)anObject;
1019 int n = count;
1020 if (n == anotherString.count) {
1021 char v1[] = value;
1022 char v2[] = anotherString.value;
1023 int i = offset;
1024 int j = anotherString.offset;
1025 while (n-- != 0) {
1026 if (v1[i++] != v2[j++])
1027 return false;
1028 }
1029 return true;
1030 }
1031 }
1032 return false;
1033 }
Run Code Online (Sandbox Code Playgroud)
关于是否使用或是现场的答案:str.isEmpty()"".equals(str)
主要的好处
"".equals(s)是你不需要 null检查(equals将检查它的参数并返回false它是否为null),你似乎并不关心.如果你不担心s是否为空(或以其他方式检查它),我肯定会使用s.isEmpty(); 它显示了您正在检查的内容,您关心的是否s为空,而不是它是否等于空字符串
Boz*_*zho 13
是的,使用String.isEmpty().它更干净(语义上)(性能稍微好一点,但这是不可察觉的)如果实例可以为null,请使用commons-langStringUtils.isEmpty(string)
因为isEmpty()检查的长度String为0,并且""是唯一的 String长度为0,每次String针对isEmpty()返回true也将返回true到.equals("").从技术上讲,他们做同样的事情.
性能上可能存在最小的差异,但我根本不会理会这一点(如果在生产代码中引人注意,我会感到非常惊讶).
另一个区别是,如果你写了"".equals(someString),那么它将是" null-safe".换句话说:如果someString是的话null,这个结构只会评估false而不是抛出一个NullPointerException.但是,如果你有,someString.equals("")那么这将不适用.
在最重要的区别是它如何阅读:isEmpty()让意图非常要区别对待空字符串:清晰..equals("")是不是那么清晰("如果该字符串等于其他字符串,恰好是空的").
通常,我喜欢使用equals但反过来,即:
"".equals(someString);
Run Code Online (Sandbox Code Playgroud)
无安全:)
但是,isEmpty()是一个更简单的操作,但不是那么多,我认为它做出了任何重要的性能贡献(除非你编写嵌入式实时的东西).