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

时间:2012-04-12 21:18:39

标签: java

  

可能重复:
  Why does “abcd”.StartsWith(“”) return 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 个答案:

答案 0 :(得分:9)

因为这就是API的设计方式,see the javadoc

但更严重的是,一个类比可以是看待集合。让我们假设一个字符串是一组字符,然后空字符串是空集。 In set theory,空集始终是任何集合的一部分。


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

  

当且仅当A的每个元素时,集合A是集合B的子集   也是B的元素。如果A是空集,则A没有元素   所以它的所有元素(没有)都属于B,无论如何   设置B我们正在处理。也就是说,空集是每个集的子集   集。

     

理解它的另一种方法是看交叉点。该   两个集合的交集是每个原始集合的子集。所以   如果{}是空集而A是任何集,那么{}与A相交是{}   这意味着{}是A的子集,{}是{}的子集。

     

你可以通过矛盾来证明这一点。让我们说你有空   set {}和A集。根据定义,{}是A的子集   除非{}中有一些元素不在A中。所以如果{}不是a   A的子集然后在{}中有一个元素。但{}没有元素和   因此这是一个矛盾,所以集合{}必须是A的一个子集。

答案 1 :(得分:3)

来自Javadoc

  

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

答案 2 :(得分:2)

确实如此:

("" + "My String")显然以""开头。

这与"My String"""

开头的说法相同

答案 3 :(得分:1)

System.out.println(""+""+""+"string"=="string") // output is true;