Java-如果条件未读取输入的字符串变量值

Java-如果条件未读取输入的字符串变量值,java,Java,我想这与我按下enter键有关,它也在存储它。我尝试将字符串播放更改为字符,但扫描仪显示错误,无法将字符串更改为字符。在比较对象(尤其是字符串)时,应避免使用“==”。“==”检查对象引用。将比较更改为使用.equals方法,这样应该可以工作 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scan = new Scan

我想这与我按下enter键有关,它也在存储它。我尝试将字符串播放更改为字符,但扫描仪显示错误,无法将字符串更改为字符。

在比较对象(尤其是字符串)时,应避免使用“==”。“==”检查对象引用。将比较更改为使用.equals方法,这样应该可以工作

import java.util.Scanner;

public class Main
{
    public static void main(String[] args) 
    {
        Scanner scan = new Scanner(System.in);
        String play = "y";
        System.out.print("Enter something: ");
        play = scan.next();
        System.out.println(play);
        if (play == "Y" || play == "y")
        {
            System.out.println("If test works!!");
        }
        System.out.println("Did it work???");
    }
}
如果“play”可以为null,则下面的代码段更安全

if(play.equals(“Y”) || play.equals(“y”))

您应该看看这个,只是想详细说明为什么@Dave2point()会出现这种情况。在对象上使用==运算符比较它们的引用。例如,(新字符串(“a”)===(新字符串(“a”))将始终计算为false,因为在内存中创建了两个不同的对象,并且引用指向内存中的两个不同位置。这就是为什么需要使用.equals()它将比较对象的内容,而不是它们在内存中的位置。对于自定义对象,您需要自己重载此方法来比较每个对象的内容。还有“a”=“a”始终计算为true,因为Java将优化代码并为字符串文本创建一个字符串对象,并将它们存储在共享内存中,因此它们的引用将与指向同一对象的引用相同。
if(“Y”.equals(play) || y.equals(play))