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来直接比较内容。