Java字符串比较导致不同的布尔值

时间:2017-11-07 04:23:35

标签: java

任何人都可以解释一下,为什么输出会打印两个不同的布尔值。在这种情况下,为什么没有比较的字符串不相等。只需将两个字符串与' =='进行比较运算符确实比较字符串。例如,     System.out.print(" paper" ==" paper")打印为true。提前致谢。 :)

package my_pack;

    import java.util.Objects;
    import java.util.Random;
    import java.util.Scanner;


    public class game {
        public static void main(String[] args) {
            //get the user input get_input()
            Scanner scn = new Scanner(System.in);
            System.out.println("Rock Paper or Scissor? Enter Your choice: ");
            String user_choice = scn.nextLine();
            user_choice = user_choice.toLowerCase();

            //get the random number
            Random rand = new Random();
            int random_num = rand.nextInt(3) + 1;

            //assign the number to specified method
            String comp_choice ="";
            switch (random_num){
                case 1:
                    comp_choice = "rock";
                    break;
                case 2:
                    comp_choice = "paper";
                    break;
                case 3:
                    comp_choice = "scissor";
                    break;
            }
            System.out.println(comp_choice);
            System.out.println(user_choice == comp_choice); //paper == paper (false)
            System.out.println(Objects.equals(user_choice, comp_choice)); //paper == paper (true)

        }

    }

1 个答案:

答案 0 :(得分:1)

如果你来自c ++,那么通过引用(==)和按值(等于)进行比较会更容易。

使用==比较两个字符串时,您要比较两个对象及其引用,而不是它们的值。当您比较两个字符串文字,例如“paper”==“paper”时,它们指向同一块内存,因此该行返回true。

而不是==,使用yourString.equals(stringToCompare)或.equalsIgnoreCase来忽略大小写的差异。

  System.out.println("RANDOM CHOICE: " + comp_choice); //display user and comp choice
  System.out.println("USER CHOICE: " + user_choice); 
  System.out.println("USER = COMP? " + user_choice.equalsIgnoreCase(comp_choice));  //compare both choices