Java substring.equals与==

Jac*_*ens 4 java iteration awk substring

使用标准循环,我将子字符串与字符串值进行比较,如下所示:

if (str.substring(i, i+3) == "dog" ) dogcount++;
Run Code Online (Sandbox Code Playgroud)

它打破了迭代.在第一次增量之后,不会检测到"狗"的其他实例.

所以我使用substring.equals,这有效:

if (str.substring(i, i+3).equals("dog")) dogcount++;
Run Code Online (Sandbox Code Playgroud)

我的问题是,为什么?只是寻求更好的理解,thx.

Ole*_*ksi 8

==比较参考.您想要使用equals()而不是比较值.


Ale*_*ood 8

您应该使用equals()而不是==比较两个字符串.

s1 == s2如果两个字符串都指向内存中的同一对象,则返回true .这是一个常见的初学者错误,通常不是你想要的.

s1.equals(s2)如果两个字符串在物理上相等(即它们包含相同的字符),则返回true .