java 扫描仪的相同精确输入不相等(对我来说?)

java scanner's same-exact-inputs are not equal (for me?)

我想比较来自 Scanner 的三对输入(只是一个快速测试) 通过使用 Compare 方法。

当我 运行 这个程序时,它 returns false 用于所有三个输入,即使它们之间应该有一个 true。当我删除 Scanner 并自己输入 String 时,我得到了正确的结果

一开始我以为是缓冲区里多了一个"Enter"按钮导致的,但是调试的时候发现缓冲区里没有多余的东西 额外的输入调用不会有任何帮助。

import java.util.Scanner; 

 public class MainSector {
    String Primary, Secondary;

    MainSector(String Primary, String Secondary){
        this.Primary = Primary;
        this.Secondary = Secondary;
    }

MainSector(int Primary, int Secondary) {
    this.Primary = String.valueOf(Primary);
    this.Secondary = String.valueOf(Secondary);
    }

boolean Compare(MainSector x){
    return (x.Primary == Primary && x.Secondary == Secondary );

    }

}


public class Test {
    public static void main(String[] args) {
        Scanner u = new Scanner(System.in);
        Scanner y = new Scanner(System.in);

        System.out.println("Enter String:");
        MainSector Sector1 = new MainSector(u.nextLine(),y.nextLine());

        System.out.println("Enter String:");
        MainSector Sector2 = new MainSector(u.nextLine(),y.nextLine());

        System.out.println("Enter Integer:");
        MainSector Sector3 = new MainSector(u.nextInt(),y.nextInt());


        System.out.println(Sector1.Compare(Sector2));
        System.out.println(Sector1.Compare(Sector3));
        System.out.println(Sector2.Compare(Sector3));


    }
}

这里returnsfalse三次即使前两个输入完全一样。例如,我得到了正确的结果:

System.out.println("Enter String:");
MainSector Sector1 = new MainSector("aa","bb");

System.out.println("Enter String:");
MainSector Sector2 = new MainSector("aa","bb");

System.out.println("Enter Integer:");
MainSector Sector3 = new MainSector(45,65);

它returns:

true

false

false

你的问题出在你的compare方法上;使用 == 比较参考值。由于您在比较中使用了不同的对象,因此在这种情况下它们永远不会具有相同的参考值。您需要使用 .equals(Object) 来比较确切的值。我编辑了下面的代码以反映这一点并对其进行了测试。
此外,您真的不需要 2 个扫描仪来执行此操作,您可以使用一个!一如既往,请记得关闭扫描仪;这是个好习惯。

import java.util.Scanner; 



 class MainSector {
    String Primary, Secondary;

    MainSector(String Primary, String Secondary){
        this.Primary = Primary;
        this.Secondary = Secondary;
    }

MainSector(int Primary, int Secondary) {
    this.Primary = Integer.toString(Primary);
    this.Secondary = Integer.toString(Secondary);
    }

//Note the changes made to this method!
    boolean Compare(MainSector x){
        return ((x.Primary.equals(Primary)) && (x.Secondary.equals(Secondary)));

        }
} //End MainSector


public class Test {
    public static void main(String[] args) {
        Scanner u = new Scanner(System.in);

        System.out.println("Enter String:");
        MainSector Sector1 = new MainSector(u.nextLine(),u.nextLine());

        System.out.println("Enter String:");
        MainSector Sector2 = new MainSector(u.nextLine(),u.nextLine());

        System.out.println("Enter Integer:");
        MainSector Sector3 = new MainSector(u.nextInt(),u.nextInt());


        System.out.println(Sector1.Compare(Sector2));
        System.out.println(Sector1.Compare(Sector3));
        System.out.println(Sector2.Compare(Sector3));

        u.close();
    } //End main
} //End Test


我找到了一个很棒的 post,如果您想了解更多,其中的答案解释得非常详细:How do I compare Strings in Java?