Java中的startsWith()方法在空String上返回true.怎么样?

Lio*_*ion 3 java

可能重复:
为什么"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(""));
    }
}
Run Code Online (Sandbox Code Playgroud)

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

JRL*_*JRL 9

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

但更严重的是,一个类比可以是看集合.让我们假设一个字符串是一组字符,然后空字符串是空集.在集合论中,空集始终是任何集合的一部分.


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

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

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

你可以通过矛盾来证明这一点.假设您有空集{}和集A.基于定义,{}是A的子集,除非{}中的某个元素不在A中.所以如果{}不是A的子集然后在{}中有一个元素.但{}没有元素,因此这是一个矛盾,因此集合{}必须是A的子集.