0

可能重复:
Java String.equals 与 ==

我在java中使用if语句通过询问天气他是男孩还是女孩来确定这个人是男性还是女性。这是一个非常愚蠢的说法,但我的查询是无论我输入什么,我总是得到“你是女性!” 这很烦人。能否请你帮忙?这是代码

import java.util.Scanner;

class ifstatement {

    public static void main( String args[] ) {
        System.out.print( "please enter boy or girl as an input:" );

        Scanner x = new Scanner( System.in );
        String a = x.nextLine();

        if ( a == "boy" ) {
            System.out.print( "You are a male" );
        }
        else {
            System.out.print( "You are a female!" );
        }
     }
 }    
4

5 回答 5

4

使用equals()方法比较String

equals()比较对象

==比较参考值

利用

if ("boy".equals(a)) {

这会将"boy"String 的实例与 String 引用的实例进行比较a


于 2012-07-26T18:16:25.353 回答
0

1.java中对象是使用.equals()方法比较的,而Strings是Java中的对象。

2.使用a.equals("boys")它会给你正确的答案....

于 2012-07-26T18:25:14.033 回答
0

运算符检查对对象的==引用是否相等。在测试字符串相等性时,这还不够。引用相等性的测试是在 中完成的String.equals() method,除其他检查外:

 public boolean equals(Object anObject) {
        if (this == anObject) {      // Reference equality
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
            int n = count;
            if (n == anotherString.count) {  // Are the strings the same size?
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = offset;
                int j = anotherString.offset;
                while (n-- != 0) {
                    if (v1[i++] != v2[j++])        // Compare each character
                        return false;
                }
                return true;
            }
        }
        return false;
  }
于 2012-07-26T18:21:29.323 回答
0

如果你说:

 if ("boy".equals(a)){
 System.out.print("You are a male");
 } else if ("girl".equals(a)){
 System.out.print("you are a female!");
 { else {
 System.out.print("invalid response!");
 }

这将解决您的问题。在处理字符串时,您应该始终使用 .equals() 来比较确切的值。“==”运算符通常比较两个对象是否指向内存中的同一位置。由于字符串是一个对象,它们是不一样的。

于 2012-07-26T18:21:38.453 回答
0

==比较使用对象引用,两个对象是否指向同一个内存位置。.equals()在 Object 类中也是如此,但是 String 类会覆盖它来进行值比较。

于 2012-07-26T18:19:53.477 回答