为什么不==在string上工作?

我刚开始Java编程。 到目前为止,我很喜欢这个问题,但是我一直在困扰这个问题。

当我运行这个代码时,每当我input“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?"); 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,而不是==运算符。

原因是==只是比较object引用。

因为String类的.equals()检查相等性

Stringequals方法ovveridden,使得传递的String对象的值与当前Object相同

string的源代码中的equals()方法:

  public boolean equals(Object anObject) { 1013 if (this == anObject) { 1014 return true; 1015 } 1016 if (anObject instanceof String) { 1017 String anotherString = (String)anObject; 1018 int n = count; 1019 if (n == anotherString.count) { 1020 char v1[] = value; 1021 char v2[] = anotherString.value; 1022 int i = offset; 1023 int j = anotherString.offset; 1024 while (n-- != 0) { 1025 if (v1[i++] != v2[j++]) 1026 return false; 1027 } 1028 return true; 1029 } 1030 } 1031 return false; 1032 } 

所以你应该写

 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 but s4 != s5

在哪里

anyOfAbove.equals(anyOtherOfAbove); //true

比较Stringtypes的对象时,应该使用equals方法而不是operator ==equals将比较String对象的值,而==检查它们是否在内存中是同一个对象。

所以,而不是:

 if(gender=="boy") 

使用

 if(gender.equals("boy")) 

使用equals而不是==

 if("boy".equals(gender)){ } 

使用等于比较值。 而==是比较对象引用。

你不能比较像java中的string,你需要使用

 if (gender.equals("boy")) 

为它工作。 你的方式是比较对象而不是内容

你在那里使用引用平等。 ==是字面上比较2引用。 即他们是同一个对象。

你需要使用equals()方法,在这个例子中,它会比较两个string的内容 。 在这里看到更多的信息。

在Java中,string是对象( String )。 包含对象的variables是引用。 如果使用==运算符比较两个对象,则仅当它们是相同对象(在内存中)时才返回true 。 但是在你的代码中,他们不是( "boys"是一个即兴的string)。

但是,有一个方法String.equals() ,它比较两个string,如果它们具有相同顺序的相同字符,则返回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"); } } } 

你也可以交换这两个string(好处是它可以防止NullPointerExceptiongender == null被抛出):

 "boy".equals(gender) 

要忽略比较的字母大小写,请使用equalsIgnoreCase()

 String a,b; a==b; 

这里比较两个string对象的引用(地址)

 a.equals(b); 

这里比较两个string的内容