Java 为什么’;t==处理字符串?
我刚开始Java编程。到目前为止我很喜欢它,但我已经在这个问题上纠缠了一段时间 当我运行此代码时,每当我输入“boy”时,它只会以Java 为什么’;t==处理字符串?,java,Java,我刚开始Java编程。到目前为止我很喜欢它,但我已经在这个问题上纠缠了一段时间 当我运行此代码时,每当我输入“boy”时,它只会以GIRL响应: import java.util.Scanner; public class ifstatementgirlorboy { public static void main(String args[]) { System.out.println("Are you a boy or a girl?"); Scann
GIRL
响应:
import java.util.Scanner;
public class ifstatementgirlorboy {
public static void main(String args[]) {
System.out.println("Are you a boy or a girl?");
Scanner input = new Scanner(System.in);
String gender = input.nextLine();
if(gender=="boy") {
System.out.println("BOY");
}
else {
System.out.println("GIRL");
}
}
}
为什么?使用
String.equals(String otherString)
函数比较字符串,而不是使用=
运算符
这是因为==
操作符仅比较对象引用,而
String.equals()
方法比较两个字符串的值,即构成每个字符串的字符序列
所以你应该写
if(gender.equals("boy")){
}
或与任何情况下的
if(gender.equalsIgnoreCase("boy")){
}
为了零安全
if("boy".equals(gender)){
}
未来参考:
String s1 = "Hello"; // String literal
String s2 = "Hello"; // String literal
String s3 = s1; // same reference
String s4 = new String("Hello"); // String object
String s5 = new String("Hello"); // String object
这里s1==s2==s3,但s4!=s5
何处为
anyOfAbove.equals(anyOtherOfAbove)//true
您无法在java中比较这样的字符串,您需要使用
if (gender.equals("boy"))
让它工作。您的方法是比较对象而不是内容您在那里使用的是引用等式。=
实际上是在比较这两个参考。i、 它们是同一个物体吗
您需要使用equals()
方法,该方法(在本例中)将比较两个字符串的内容。有关更多信息,请参阅。在比较字符串类型的对象时,应使用等于方法,而不是运算符=
equals
将比较String
对象的值,同时=
检查它们是否是内存中的同一对象
因此,不是:
if(gender=="boy")
使用
使用equals
代替=
if("boy".equals(gender)){
}
使用equals比较该值。而==
是比较对象引用
String a,b;
a==b;
这里比较两个字符串对象的引用(地址)
a.equals(b);
这里比较两个字符串的内容在Java中,字符串是对象(String
)。包含对象的变量是引用。如果使用=
运算符比较两个对象,则仅当它们是相同的对象(在内存中)时才会返回true
。但在您的代码中,它们不是(“boys”
是一个动态实例化的字符串)
a.equals(b);
但是,有一个方法String.equals()
,它比较两个字符串,如果它们具有相同顺序的相同字符,则返回true,而不是如果它们是相同的对象
请在此更正代码:
import java.util.Scanner;
public class ifstatementgirlorboy {
public static void main(String args[]) {
System.out.println("Are you a boy or a girl?");
Scanner input = new Scanner(System.in);
String gender = input.nextLine();
if (gender.equals("boy")) {
System.out.println("BOY");
}
else {
System.out.println("GIRL");
}
}
}
您还可以交换这两个字符串(优点是,如果gender==null
,它可以防止引发NullPointerException
):
要忽略比较中字母的大小写,请改用equalsIgnoreCase()
。在java中对字符串使用等于而不是==。请查看本网站上的其他问题,以了解更多关于此问题的精确性。这一问题已被问了很多时间。当有人将JavaString
s与=
进行比较时,请在发布之前花点时间探索一下,开发人员会哭喊……哦,上帝。。。你知道你已经有一段时间没有学过Java了,当你突然想起指针考试的问题时,第二个==出现了“为什么不==处理字符串”?它确实有效!当你问一个字符串是否与另一个字符串“相等”时,它并没有做你通常想做的事情。或者更好的是,“boy”。equals(性别)
因为即使gender==null
和equalsIgnoreCase()也可以使用
会更好:D@Tichodroma有时,如果某个东西是null
,你应该注意它。因此,你实际上希望看到NPE以防止出现这种情况。但是,如果你可以故意将某个字符串设置为null
。那么这种态度是非常好的。@marounnaroun:如果null是预期的,并且会被不同的对待,那么en检查null
会更好地捕捉到NPEJava是最奇怪的语言,感谢这些快速的回答。第一次在stackoverflow上。正确,但是他的代码也不工作吗?字符串是内部化的,所以在读取“boy”时,引用应该都指向同一个“boy”字符串对象?
import java.util.Scanner;
public class ifstatementgirlorboy {
public static void main(String args[]) {
System.out.println("Are you a boy or a girl?");
Scanner input = new Scanner(System.in);
String gender = input.nextLine();
if (gender.equals("boy")) {
System.out.println("BOY");
}
else {
System.out.println("GIRL");
}
}
}
"boy".equals(gender)