记一次字符串==引发的bug

(UserUtils.getUser().getExtend().getExtendS1()=="tenantAdministrator"?false:true

一切都因这行代码引发。。。。。。。

== 和 equals 就不介绍了

起先以为"tenantAdministrator" 保存到元空间,(UserUtils.getUser().getExtend().getExtendS1() 保存到堆里,后来用intern测了一下发现不是。。。

1fe89635d46a0f7866d19cf5b659c4e63a5.jpg1d40b03c27e39b531729a342b416ff6475c.jpg

(UserUtils.getUser().getExtend().getExtendS1().intern() == "tenantAdministrator"   // false
(UserUtils.getUser().getExtend().getExtendS1() == "tenantAdministrator".intern()   // false
(UserUtils.getUser().getExtend().getExtendS1().intern() == "tenantAdministrator".intern()   // true

        String 中 intern用来返回常量池中的某字符串,如果常量池中已经存在该字符串,则直接返回常量池中该对象的引用。否则,在常量池中加入该对象,然后 返回引用。

        也就是说 用intern 返回的是元空间的引用,(UserUtils.getUser().getExtend().getExtendS1() 是在堆中,"tenantAdministrator" ??? 在哪??

        打印一下字节码。。。可以看到

        Constant pool:

       #86 = String             #339          // tenantAdministrator

      #339 = Utf8               tenantAdministrator

---------------------方法内-----------------------------

       402: ldc           #86                 // String tenantAdministrator

 

今天发现 (UserUtils.getUser().getExtend().getExtendS1().intern() == "tenantAdministrator" 为true 了。。

那么咱们就不管BUG了 咱们只看string 和string pool

带着疑问,string 啥时候到 string pool 里面

https://blog.csdn.net/qq_26222859/article/details/73135660

转载一下- -这个比较全。。

 

转载于:https://my.oschina.net/haloooooo/blog/3015382

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值