-2

可能重复:
如何比较 Java 中的字符串?

所以,我有一个关于测试运算符和字符串的问题。我正在尝试编写一个程序,该程序将接受“男孩”或“女孩”的用户输入。当用户输入“男孩”时,输出应该是“你是男孩”。当用户输入“女孩”时,输出应该是“你是女孩”。

但是,当我编译运行程序时,无论我输入什么,输出总是“你是个女孩”。

这是因为字符串没有像整数这样的实际值,因此不能使用测试运算符来比较它们吗?

另外,在java中有没有类似python中的assert函数的东西?

import java.util.Scanner;

class apples{
    public static void main(String args[]){
        System.out.println("Are you a boy or a girl?");
        Scanner lalala = new Scanner(System.in);
        String text = lalala.nextLine();

        if (text == "boy"){
            System.out.println("You are a boy.");
        }
        else{
            System.out.println("You are a girl.");
        }



    }
}

非常感谢~

4

8 回答 8

6

利用

text.equals("boy")

代替

 if (text == "boy")

原因是,在 Java 中, == 总是只比较两个引用(即对于非原始对象)——即它测试两个操作数是否引用同一个对象。

然而,equals 方法可以被覆盖——所以两个不同的对象仍然可以相等。

但更好的选择是使用equalsIgnoreCase,原因是用户可以输入 boy 或 BOY 或 Boy 或任何其他组合。equalsIgnoreCase方法只是忽略大小写并比较两个字符串。

text.equalsIgnoreCase("boy")
于 2012-12-27T06:16:44.610 回答
2

利用text.equalsIgnoreCase("boy")

如果您考虑大小写,它也会检查字符串的内容是否相同。

== 用于检查对象是否相等。

如果您不考虑大小写,则 text.equals("boy") 可以。

于 2012-12-27T06:15:48.447 回答
2

边注。男孩以外的输入将使您打印女孩。再多放一个 if 条件。同样在进行比较之前,在更安全的一侧修剪字符串中的空格。

利用

 text.equals("boy")

或者

 text.equalIgnoreCase("boy") 

如果它不区分大小写。

代替

if (text == "boy")

你的代码将是这样的

 import java.util.Scanner;

class apples{
public static void main(String args[]){
    System.out.println("Are you a boy or a girl?");
    Scanner lalala = new Scanner(System.in);
    String text = lalala.nextLine();
    text = text.trim();
    if (text.equalIgnoreCase("Boy")){
        System.out.println("You are a boy.");
    }
    else if(text.equalIgnoreCase("Girl")){
        System.out.println("You are a girl.");
    } else {
        System.out.println("Invalid Gender");
    }
 }
}
于 2012-12-27T06:22:15.360 回答
1

请使用equals以下字符串的方法:if (text.equals("boy")){

==不适用于 java 中的字符串内容相等性检查

于 2012-12-27T06:16:25.627 回答
1

== 测试对象标识是否相同。当您有两个包含相同值的字符串对象时,此对象标识将不相等。使用 equals 函数来测试逻辑等价。

于 2012-12-27T06:17:03.453 回答
1

if else错了。仅if在此处使用。否则,

如果我输入"some text",输出将是"You are a girl"

像这样

  if (text.equalsIgnoreCase("boy")) {
        System.out.println("You are a boy.");
    }
    else if (text.equalsIgnoreCase("girl")) {
        System.out.println("You are a girl.");
    } else {
        System.out.println("You are neither a boy nor a girl");
    }
于 2012-12-27T06:28:29.760 回答
0

最好使用 .equals 方法而不是 == boy

于 2012-12-27T06:29:39.837 回答
0

对于您关于断言的其他问题:Java 有一个断言函数。这是示例代码。

  assert(x <= 50):      "Not Accepted"; 

此代码检查整数 x 是否大于 50。您将在控制台看到输出。

于 2012-12-27T06:31:27.077 回答