自学刚学完Java基础语法一个案例傻了

问题遇到的现象和发生背景

一个买飞机票的案例,用if做的,不知道为什么这种情况判定false

问题相关代码,请勿粘贴截图

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

    System.out.println("输入机票原价");
    double num1 = sc.nextDouble();

    System.out.println("输入月份");
    int num2 = sc.nextInt();

    System.out.println("输入头等舱或经济舱");
    String num3 = sc.next();

    double money =add(num1,num2,num3);
    System.out.println(money);

    public static double add(double num1 , int num2 , String num3) {
    double money = 0.0;
    if (num2 >= 5 && num2 <= 10) {          //5月到10月价格
        if (num3 == "头等舱"){
            money = num1 * 0.9;                  //头等舱9折 经济舱85折
        }else {
            money = num1 * 0.85;
        }
    } else if ((1 <= num2 && num2 <5) || (10 < num2 && num2 <= 12)){        //11月到1月价格
        if (num3 == "头等舱"){
            money = num1 * 0.7;
        }else{                                         // 不知道为什么系统不管是不是头等舱就直接到else这里了
            money = num1 * 0.65;
        }
    }
    return money;
运行结果及报错内容

输入机票原价
1000
输入月份
2
输入头等舱或经济舱
头等舱
650.0

num3 == "头等舱" ===》 "头等舱" .equals(nums3)

字符串比较用equals不要用双等号,双等号比较的是地址,你输头等舱他比较地址不一致,就会直接进入else

题主需要再仔细补一下 == 和.equals的用法和区别,否则后面还是会出现这样的问题。 == 既可以比较基本类型也可以比较引用类型。对于基本类型就是比较值,对于引类 型就是比较内存地址,而你用Scanner输入的字符串的地址在栈中和原本的字符串不在一个地址,所以会默认跳false