问一个关于String比较的问题,为什么a可以用if(a==‘给’)进行判断,b就需要用equals

img

public class Test
   pubLicstaticvoid main(Stringl]args)
        String a=“给”;
        Stringb
        Scannersc=new Scanner(system.in)
       b=sc.nextO;
       System.out.printn(b)
       if(b.equals(给”))
            System.out.printn(1)

你可以参考如下链接:


如果对你有帮助,可以给我个采纳吗,谢谢!! 点击我这个回答右上方的【采纳】按钮

因为这一步是2个动作:String a="给",初始化"给",运行时初始化a;此时a指向"给",再次使用a=="给",因为已经有"给",则直接获取地址与a的指向地址判断是否相同即可

1.a为什么可以用?因为String属于引用数据类型,在这里“==”比较的是两个变量存储的地址值,你把"给"赋给a,实际上赋的是“给”在堆空间的地址值,所以都是地址做比较就可以用==
2.b为啥要用equals?首先你要了解equals在String里是被重写了的,最初的equals方法实际上和“==”一样比较的是地址值,但在String里equals方法是直接可以比较“内容的”,你这里的b是通过输入的,输入方法里会让你new一个新的堆空间出来,对应也就是一个新的地址,而你想要比较的“给”已经在堆空间的常量池里有了地址,所以如果强制用"==",那结果永远是false,因为两个地址值永远不一样!所以现在我们就需要用equals来直接比较内容。