3

可能重复:
为什么“abcd”.StartsWith(“”) 返回 true?

以下简单的 Java 代码只是使用了该startsWith()方法。

package startwithdemo;

final public class Main
{    
    public static void main(String[] args)
    {
        System.out.println("My String".startsWith("M"));
        System.out.println("My String".startsWith("My"));
        System.out.println("My String".startsWith(""));
    }
}

它显示true在所有情况下。前两种情况很明显,但在最后一种情况下(使用空字符串),它正在返回true. 如何?

4

4 回答 4

10

因为这就是 API 的设计方式,请参阅 javadoc

但更严重的是,一个类比可以是看集合。假设一个字符串是一组字符,那么空字符串就是空集。在集合论中,空集总是任何集合的一部分。


为什么空集是每个集的子集?(取自这里

集合 A 是集合 B 的子集当且仅当 A 的每个元素也是 B 的元素。如果 A 是空集,则 A 没有元素,因此它的所有元素(没有元素)都属于 B无论我们处理的是什么 B 组。也就是说,空集是每个集合的子集。

另一种理解它的方法是查看交叉点。两个集合的交集是每个原始集合的子集。因此,如果 {} 是空集且 A 是任意集,则 {} intersect A 是 {},这意味着 {} 是 A 的子集,而 {} 是 {} 的子集。

你可以用反证法来证明。假设您有一个空集 {} 和一个集合 A。根据定义,{} 是 A 的子集,除非 {} 中的某些元素不在 A 中。所以如果 {} 不是A 那么 {} 中有一个元素。但是 {} 没有元素,因此这是矛盾的,因此集合 {} 必须是 A 的子集。

于 2012-04-12T21:21:29.430 回答
3

Javadoc

返回: 如果参数表示的字符序列是该字符串表示的字符序列的前缀,则返回 true;否则为假。 另请注意,如果参数是*空字符串* 或等于由 equals(Object) 方法确定的此 String 对象,则将返回 true 。

于 2012-04-12T21:22:30.927 回答
2

是真的:

("" + "My String")显然以"".

这和"My String"开头是一样的""

于 2012-04-12T21:23:06.083 回答
1
System.out.println(""+""+""+"string"=="string") // output is true;
于 2012-04-12T21:22:56.443 回答