示例一、
| 代码如下 | 复制代码 |
|
public class Demo { |
|
输出结果:
true
true
显然equals比两者值是否相等,所以返回true;那么,第二个值真为true吗?明明两个不同变量啊!其实JVM对于
String的游戏规则是这样安排的:
以 String str=”soka”;形式赋值在java中叫直接量,它存储在常量池中而不是像new String(“soka”)一样放在压
缩堆中,以这种方式赋值后,如果第二次用类似方式声明赋值String str2=”soka”,它首先会在常量池中找“soka
”如果找到了,str也将指向”soka”这个引用。所以两者引用的同一个对象,示例中用==比较两个对象是否是同一个
引用,为true那就理所当然啦。
示例二、
| 代码如下 | 复制代码 |
|
public class Demo { |
|
输出结果:
true
false
str和str2的值显然相等,所以用equals比较为true;str和str2都以new的形式向内存申请了各自的空间,所以他俩属
于不同对象,第二条输出语句为false。
示例三、
| 代码如下 | 复制代码 |
|
public class Demo { |
|
输出结果:
sb的值:welcome sb2的值:welcome
true
false
输出语句2为true大家没有疑问吧,因为sb和sb2的是同一引用。
从输出语句1可以看str2的变量值是”welcome”,那么输出语句3为什么是false呢?不急,我们先看Object基类中
equals方法的源码:
| 代码如下 | 复制代码 |
|
boolean equals(Object o) |
|
从源码可以看出,Object中equals方法比较的就是地址/引用。是的,在java中,StringBuffer类并没有重写equals方
法,所以输出语句3中的equals是单纯从Object继承过来的,输出语句3为false就不用质疑了
《黎明杀机》开发商正开发新的《Serious Sam》游戏 由Devolver发行
超英派遣中心即将登陆Xbox Play Anywhere 深入了解这款独特而备受喜爱的冒险游戏
在《Hunter: The Reckoning – Deathwish》中怎么从猎物蜕变为猎手
《The Expanse: Osiris Reborn》——深入了解玩法 新同伴 封闭测试及发行窗口
Alien Deathstorm 科幻生存与动作结合 打造全新第一人称恐怖混合体验
宝可梦公司已在考虑未来可用口袋妖怪总数达到“或许一万只”
幸存者村庄2
怪可爱的店折相思菜单
怪可爱的店折相思菜单是一款画风治愈的模拟经营佳作,内置折相思菜单解锁多项便利功能
lol电竞经理人手游
lol电竞经理人手游让你可以成为职业的电竞经理人,在游戏中掌控游戏的走向!豪华阵
梦幻奶茶屋小游戏
梦幻奶茶屋是一款主打温馨治愈氛围的休闲经营作品,玩家将化身元气满满的奶茶店店长,
萌宠养成物语无限金币版
萌宠养成物语无限金币版是一款治愈系模拟养成游戏,以可爱卡通画风构建温馨虚拟世界,