为什么在 Java 中字符串以 “” 开头?

2022-09-02 05:04:10

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

在调试一些代码时,我发现我的验证的一个特定部分正在使用String类上的方法来检查字符串是否以空白字符开头.startsWith()

考虑以下因素:

public static void main(String args[])
{

    String s = "Hello";
    if (s.startsWith(""))
    {
        System.out.println("It does");
    }

}

它打印出来It does

我的问题是,为什么字符串以空白字符开头?我假设引擎盖下的字符串本质上是字符数组,但在这种情况下,我本来以为第一个字符会是H

任何人都可以解释一下吗?


答案 1

“” 是不包含任何字符的空字符串。没有“空字符”,除非您指的是空格或空字符,这两者都不是空字符串。

您可以将字符串视为以无限数量的空字符串开头,就像您可以将数字视为以无限数量的前导零开头而不改变含义一样。

1 = ...00001
"foo" = ... + "" + "" + "" + "foo"

字符串也以无限数量的空字符串结尾(与带零的十进制数一样):

1 = 001.000000...
"foo" = "foo" + "" + "" + "" + ...

答案 2

似乎您的代码中存在误解。您的语句检查字符串是否以空字符串(而不是空白字符)开头。这可能是一个奇怪的实现选择,无论如何,它都是这样:所有字符串都会说它们以空字符串开头。s.startsWith("")

另请注意,字符串将是空白字符,而不是空字符串 。" """