博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
记一次字符串==引发的bug
阅读量:6851 次
发布时间:2019-06-26

本文共 1183 字,大约阅读时间需要 3 分钟。

hot3.png

(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

你可能感兴趣的文章
下一个目标-百度
查看>>
百度地图API学习之路(2)
查看>>
dell服务器硬盘的状态变成外来(foreign)
查看>>
redhat6.4更换centos 6 的 yum源
查看>>
jsquery问题
查看>>
深入了解android平台的jni---编译ffmpeg源码
查看>>
共享JSP部署后测试代码
查看>>
日常订阅的开发工具和服务——2018年
查看>>
linux下乱码问题及解决方式
查看>>
回车和换行有什么区别?很尴尬》》》
查看>>
Hibernate(十六)数据库事务与隔离级别
查看>>
laravel、lumen遇到的问题解决
查看>>
MYSQL-mysqlslap
查看>>
Cisco ASA5500解决内网用公网IP不能访问DMZ区服务器的
查看>>
Windows7常用命令
查看>>
crack-jar游戏之拉阔
查看>>
Java中的深拷贝和浅拷贝
查看>>
<JQuery>页面加载函数的三种写法
查看>>
大数据系列12:Hadoop2 – 全新的Hadoop
查看>>
Result相关
查看>>