string比较中为什么不用“==”而是选择用“equals()语法”
两种string字符串生成方式
- 直接使用字符串字面赋值
如:String s1 = "zhoujiale";
此类型中,计算机在“串池(位于常量池中)”中创造空间“zhoujiale”
- 利用new的方式创建字符串
如:String s2=new string("zhoujiale");
“==”和“equals()语法”的区别
- ==
在两种不同空间的方式下创造的字符串时,哪怕字符串本身字母相同,本质上还是两种不同的字符串
所以上述的“s1”和“s2”在“==”时判定为false
2.“equals()语法”
equals() 方法可以确保无论字符串对象位于内存的哪个区域(常量池或堆)
只要内容相同,就会返回 “true”
本质:为什么写代码时用“equals()语法”
- 在做项目时,如“用户登录”,需要用到scanner类
scanner类生成字符串的底层逻辑是在“堆”里生成的
- 我们一般在定义字符串是用第一种方式,即String s1 = "zhoujiale";是在“常量池”定义的
- 代码用“==”时,哪怕字符串输入正确,因为本质不同,结果依旧是 false
- 代码用“equals()语法”时,只比较字符串内容是否正确,不需要考虑本质定义问题
字符串输入正确,true
字符串输入错误,false