Java编程遇到的一点小问题

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

为什么我输入shi,输出的却是3?其中存在什么问题

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

package java语言基础; //匹配有误;

import java.util.Scanner;

public class 待定2 {
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
String b=sc.next();
if(b=="shi")
System.out.println("1");
else if(b =="fou")
System.out.println("2");
else
System.out.println("3");
}
}

运行结果及报错内容

输入shi或fou,输出3

我的解答思路和尝试过的方法

如果直接将b赋值为shi的话可以通过匹配,然后输出1,通过输入的方式就行不通

我想要达到的结果

各位兄弟有谁能我给我解释一下这个问题,以及我该怎么改进;

原因:
String是引用数据类型,用==判断的时候,会比较对应的值和地址是否相等,用equals()函数判断的时候,只会比较值是否相等,所以引用类型之间比较值是否相等,要用equals()函数。
八大基本数据类型(byte,char,boolean,short,int,float,double,long)比较值的时候才能用==判断。
代码修改如下:

import java.util.Scanner;
public class 待定2 {
    public static void main(String[] args)
    {
        Scanner sc=new Scanner(System.in);
        String b=sc.next();
        if(b.equals("shi"))
            System.out.println("1");
        else if(b.equals("fou"))
            System.out.println("2");
        else
            System.out.println("3");
    }
}

img

像==、!=这些比较运算符可以说是给基本类型使用的,像String这种非基本类型的不能直接用这个比较
String类型如果要判断两个字符串是否相等或不等要用equals()
你题目的解答代码如下:

import java.util.Scanner;

public class 待定2 {
    public static void main(String[] args)
    {
        Scanner sc=new Scanner(System.in);
        String b=sc.next();
        if(b.equals("shi"))
            System.out.println("1");
        else if(b.equals("fou"))
            System.out.println("2");
        else
            System.out.println("3");
    }
}

img

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

img

== : 就相当于 你有10块钱,我也有10块钱,但是我这10块钱不是你的那个10块钱,是不相等的,这是判断两个东西是不是同一个东西;
equals(): 相当于你有10块钱,我也有10块钱,我们都是10块钱,是相等的,这判断是是两个东西的某些属性是否相等(具体判断什么要看怎么重写的equals)

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632