博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java String的==和equals
阅读量:6533 次
发布时间:2019-06-24

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

hot3.png

xxx.intern()检查常量池是否存在xxx代表的字符串,如果存在,直接返回常量池中字符串对象的引用;如果不存在,把xxx的引用复制到常量池,然后返回xxx的引用。

String str1 = new String("Hello")+ new String("World");System.out.println(str1.intern() == str1);System.out.println(str1 == "HelloWorld");结果:truetrue

str1在堆上创建三个对象,分别存放:“Hello”、“World”、“HelloWorld”

str1.intern()发现常量池不存在"HelloWorld",将str1应用放到常量池,因此,str1.intern() == str1 == "HelloWorld"。

String str2 = "HelloWorld";String str1 = new String("Hello")+ new String("World");System.out.println(str1.intern() == str1);System.out.println(str1 == "HelloWorld");结果:falsefalse

str1.intern()发现常量池存在"HelloWorld",返回应用其实是str2,因此,str1.intern() == str2 == "HelloWorld"。

网上说,JDK1.6和JDK1.8处理不一样。不过,对于字符串判断内容是否相等,还是记得用equals来吧。不要将c++ string的==带到Java中来。

System.out.println(str1.intern().equals(str1));System.out.println(str1.equals("HelloWorld"));结果:truetrue

转载于:https://my.oschina.net/smallfan/blog/2245492

你可能感兴趣的文章
高速数论变换(NTT)
查看>>
Springmvc的跳转方式
查看>>
加密原理介绍,代码实现DES、AES、RSA、Base64、MD5
查看>>
LINUX中常用操作命令
查看>>
python 获取进程pid号
查看>>
链表中插入一个节点的三种情况
查看>>
洛谷.4180.[模板]次小生成树Tree(Kruskal LCA 倍增)
查看>>
TCL函数“参数自动补全” 与 “help 信息显示”
查看>>
POJ1050To the Max
查看>>
汇编基础--标识符、标号、伪指令和指令
查看>>
Linux软中断、tasklet和工作队列
查看>>
如何解决ORA-28002 the password will expire within 7 days问题(密码快过期)
查看>>
Asp.Net Core 轻松学-利用日志监视进行服务遥测
查看>>
LightSwitch社区资源搜集
查看>>
Android通讯录查询篇--ContactsContract.Data 二(续)
查看>>
IT人的自我导向型学习:开篇杂谈
查看>>
[原创]BizTalk动手实验系列目录
查看>>
HDU 4611Balls Rearrangement(思维)
查看>>
[LeetCode] Majority Element II
查看>>
minGW, cygwin, GnuWin32【C++的跨平台交叉编译问题】
查看>>