为什么Strings在Java中以""开头?

Jim*_*mmy 20 java string logic startswith

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

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

考虑以下因素:

public static void main(String args[])
{

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

}
Run Code Online (Sandbox Code Playgroud)

打印出来 It does

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

有人可以解释一下吗?

Cam*_*ron 40

""是一个不包含字符的空字符串.没有"空字符",除非你的意思是空格或空字符,它们都不是空字符串.

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

1 = ...00001
"foo" = ... + "" + "" + "" + "foo"
Run Code Online (Sandbox Code Playgroud)

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

1 = 001.000000...
"foo" = "foo" + "" + "" + "" + ...
Run Code Online (Sandbox Code Playgroud)

  • Java中的`0200!= 200`. (4认同)
  • 领先的零没什么区别,但我的老化学教授对尾随零做了大量的事情......称他们为重要数字或其他类似的傻事:) (4认同)
  • 要使类比完全排列,你应该使用1.0,这样在末尾添加零也没有效果.:) (2认同)
  • @Justin,我相信Cameron更多地提到了一个抽象概念(即在数学1 = ... 0000001 = 1.00000000 ......)等等.一个提示是"foo"="foo",这在Java中是非法的,例如:)他实际上也使用了"foo"=="foo"...... (2认同)
  • 老实说,无论如何,有关重要数字的论点与数学无关.您的重要数据基于测量精度,这不是大多数数学中使用的概念.数学中的标准视图是1 = 1.0 = 1.00,依此类推. (2认同)

Rid*_*del 11

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

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


Nic*_*ore 7

"Hello"以""开头,它也以"H"开头,它也以"He"开头,它也与"Hel"形成对话......你看到了吗?


djn*_*jna 5

那个""不是空白,它是一个空字符串.我猜这个API问的问题是这是一个子串.零长度空字符串是所有内容的子字符串.