以下简单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
。怎么样?
答案 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;