Java.lang.String.contains()方法,并带有&引用;一串

Java.lang.String.contains()方法,并带有&引用;一串,java,Java,我写了这样的代码: String name=""; String path="hai"; if(path.contains(name)) { System.out.println("its working"+name.length()); } 输出: 它的工作原理 我无法理解if条件是如何满足的。请帮助测试路径是否包含空字符串,但每个字符串(甚至空字符串)都与此条件匹配,因此测试始终通过 所有非null字符串都包含空字符串“” 在代码中,

我写了这样的代码:

    String name="";
    String path="hai";
    if(path.contains(name))
    {
        System.out.println("its working"+name.length());
    }
输出: 它的工作原理


我无法理解if条件是如何满足的。请帮助测试路径是否包含空字符串,但每个字符串(甚至空字符串)都与此条件匹配,因此测试始终通过

所有非
null
字符串都包含空字符串

在代码中,执行时的
if
实际上是:

if ("hai".contains(""))
if
中的表达式产生满足它的
true

关于输出,再次说明如下:

System.out.println("its working" + "".length());

因此,打印
其工作方式0

答案是正确的。空字符串“”是任何字符串的子字符串。就像空集是任何集合的子集一样


如果计算
“name.”子字符串(0,0)
,则得到
。因此,“”是“name”的子字符串。

contains方法在内部使用
indexOf
方法。如果您深入查看源代码,就会发现一个类似

if (targetCount == 0) {
    return fromIndex;
}
其中,
targetCount
是目标字符串的长度(在您的例子中为空字符串),您可以看到,如果目标字符串的长度为0,则该方法返回值为0的fromIndex。
contains
返回true,因为
0>-1
,contains方法的主体如下所示

indexOf(s.toString()) > -1

这篇文章的标题说,我可以请你为我修改的上面的例子做些什么吗?这不是一个很大的问题。空字符串是字符串(此处)的子字符串。我想你是在问为什么,但答案是:因为
包含
就是这样工作的。(从集合的角度来看,它是有意义的,空字符串就是空集合)。