-2

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

我真的不明白为什么当我写“y”并按回车时下面的程序没有显示任何内容。

import java.util.Scanner;

public class desmond {
    public static void main(String[] args){
        String test;
        System.out.println("welcome in our quiz, for continue write y and press enter");
        Scanner scan = new Scanner(System.in);
        test = scan.nextLine();
        if (test == "y") {
            System.out.println("1. question for you");
        }
    }
}
4

3 回答 3

3

用于equals()比较字符串

喜欢

test.equals("y")

更好

"y".equals(test)
于 2012-11-27T18:29:02.897 回答
2

您(通常)需要将字符串与equalsJava 中的字符串进行比较:

if ("y".equals(test))
于 2012-11-27T18:29:10.070 回答
1

您可以使用 == 比较字符串吗?是的。100% 的工作时间?不。

当我开始用 java 编程时,我学到的第一件事就是永远不要使用 == 来比较字符串,但是为什么呢?让我们进行技术解释。

String 是一个对象,如果两个字符串具有相同的对象,则方法 equals(Object) 将返回 true。== 运算符仅在两个引用 String 引用指向同一个对象时才返回 true。

当我们创建一个 String 时,实际上是创建了一个字符串池,当我们创建另一个具有相同值的 String 字面量时,如果 JVM 需求在 String 池中已经存在一个具有相同值的 String,如果有的话,你的变量是否指向相同的内存地址。

因此,当您使用“==”测试变量“a”和“b”的相等性时,可能会返回 true。

例子:

String a = "abc" / / string pool
String b = "abc"; / * already exists a string with the same content in the pool,
                                  go to the same reference in memory * /
String c = "dda" / / go to a new reference of memory as there is in pool

如果您创建字符串以便在内存中创建一个新对象并使用“==”测试变量 a 和 b 的相等性,则它返回 false,它不指向内存中的同一位置。

String d = new String ("abc") / / Create a new object in memory

String a = "abc";
String b = "abc";
String c = "dda";
String d = new String ("abc");


a == b = true
a == c = false
a == d = false
a.equals (d) = true
于 2012-11-27T18:46:42.803 回答