我可能在某个地方犯了一个逻辑错误,但我不知道在哪里。 即使条件似乎为TRUE
,输出也始终为FALSEpublic class Test {
public static void main(String[] args) {
String str1 ="Hello world";
String str2 ="Hello world";
if (checkSubstring(str1,str2)){
System.out.println("Cool");
}
else
System.out.println("Not cool");
}
static boolean checkSubstring(String str1, String str2) {
String s1 = str1;
String s2 = str2;
if (s1.substring(4)== s2.substring(4)){
return true;
}
else
return false;
}
}
答案 0 :(得分:6)
您应始终使用equals
方法来测试string
的内容。
==
运算符检查两个reference
是指向同一个对象还是不同对象。由于s1.substring()
和s2.substring()
会生成两个不同的字符串对象,因此比较它们的reference
将为您提供false
布尔值。
因此,在checkSubstring
方法中,您应该比较您的子字符串: -
if (s1.substring(4).equals(s2.substring(4))) {
return true;
} else {
return false;
}
答案 1 :(得分:2)
s1.substring(4)== s2.substring(4)
在上面将其更改为s1.substring(4).equals( s2.substring(4))
- Objects
使用equals()
方法进行比较。
- 由于String
是Java中的对象,因此必须以相同的方式对待它。
- 此外,如果您尝试比较2个字符串而不管其案例,请使用equalsIgnoreCase()
。
- " =="用于比较基元类型,还用于检查2 Object Reference Variables
是否指向堆上的同一对象。
<强>例如强>
Dog d1 = new Dog();
Dog d2 = d1;
if (d1 == d2){}
答案 2 :(得分:1)
你需要等于功能
static boolean checkSubstring(String str1, String str2) {
String s1 = str1;
String s2 = str2;
if (s1.substring(4).equals(s2.substring(4))){
return true;
}
else
return false;
}