使用标准的循环,我比较了一个子字符串和字符串值,代码如下:
if (str.substring(i, i+3) == "dog" ) dogcount++;
然后这个迭代被打破了。在第一次增量后,不会再检测到任何“dog”的实例。
所以我使用了substring.equals,它起作用了:
if (str.substring(i, i+3).equals("dog")) dogcount++;
我的问题是为什么?只是想更好地理解,谢谢。
(该文涉及IT技术)使用标准的循环,我比较了一个子字符串和字符串值,代码如下:
if (str.substring(i, i+3) == "dog" ) dogcount++;
然后这个迭代被打破了。在第一次增量后,不会再检测到任何“dog”的实例。
所以我使用了substring.equals,它起作用了:
if (str.substring(i, i+3).equals("dog")) dogcount++;
我的问题是为什么?只是想更好地理解,谢谢。
(该文涉及IT技术)在比较两个字符串时,应该使用 equals()
而非 ==
。
s1 == s2
只有当两个字符串在内存中指向同一个对象时才返回 true。这是初学者常犯的错误,通常不是您想要的结果。
s1.equals(s2)
只有当两个字符串内容相同(即包含相同字符)时才返回 true。
while(true) { }
,但我并不确定。 - Alex Lockwoodpublic boolean catDog(String str) {
int dogcount = 0;
int catcount = 0;
for (int i=0; i但我相信我误解了我的结果。抱歉。
- Jacob Stevens==
比较的是引用。你应该使用 equals()
来比较值。
==
用于比较字符串的引用(字符串的存储位置)。
而
.equals()
用于比较字符串的值。
"String"是Java中的一个对象,因此"=="比较的是引用,正如所述。 然而,像下面这样的代码
String str1 = "dog";
String str2 = "dog";
if(str1==str2)
System.out.println("Equal!");
实际上会输出“Equal!”,这可能会让你感到困惑。原因是当你直接将字面量赋值给String
对象时,JVM会对你的代码进行一些优化,以便str1和str2实际上引用了JVM内部池中存储的相同对象。另一方面,代码
String str1 = new String("dog");
String str2 = new String("dog");
if(str1==str2)
System.out.println("Equal!");
不会打印任何内容,因为您明确声明了要使用两个新对象。
如果想避免复杂性和意外错误,请永远不要在字符串中使用"=="。