java中字符串(1)
我们再来看一段代码:
运行一下:
没错,一个true,一个是false,(答错的小朋友去面壁去),大家可能在想编译器肯定又调皮了,编译的时候是不是又偷偷加了些什么,迫不及待的打开class文件看一下:
除了删掉了空行以外和我的java源文件一致呀,这回可冤枉编译器了,那为什么会导致不同的结果呢?我们都知道,Java代码是运行在JVM里的,那是不是JVM在执行这段代码时给我们做了什么?
在JVM中,当代码执行到String s1 = "100" 时,会先看常量池里有没有字符串刚好是“100”这个对象,如果没有,在常量池里创建初始化该对象,并把引用指向它,如下图,绿色部分为常量池,存在于堆内存中。
当执行到String s2 = "100" 时,发现常量池已经有了100这个值,于是不再在常量池中创建这个对象,而是把引用直接指向了该对象,如下图:
这时候我们打印System.out.println(s1 == s2)时,由于==是判断两个对象是否指向同一个引用,所以这儿打印出来的就应该是true。
继续执行到Strings3 = new String("100") 这时候我们加了一个new关键字,这个关键字呢就是告诉JVM,你直接在堆内存里给我开辟一块新的内存,如下图所示:
继续执行String s4 = new String("100")
这时候再打印System.out.println(s3 == s4) 那一定便是false了,因为s3和s4不是指向对一个引用(对象)。
注:图中只是画出了main方法栈和相关对象在内存中的大致模拟,实际中JVM中内存管理比较复杂,大家有条件的话可以去找《Java虚拟机规范》这本书去深入研究。
结论:我们在比较两个String对象内容时,无论是怎么声明的,都一定要使用equals去比较,不能用==,在Java中没有重载操作符这一说,特别是从其它语言转到Java的童鞋们要注意。equals我在其它文章里已经做了详细解说,传送门:说说Java里的equals(上) - 知乎专栏
转载无限欢迎,但请注明「清浅池塘」和「https://zhuanlan.zhihu.com/p/27573287」。转载请在文中保留此段,感谢您对作者版权的尊重。如需商业转载或刊登,请联系作者获得授权。自助转载:https://www.rightknights.com/materi
java中字符串(1)相关推荐
- 【转】Java中字符串中子串的查找共有四种方法(indexof())
原文网址:http://wfly2004.blog.163.com/blog/static/1176427201032692927349/ Java中字符串中子串的查找共有四种方法,如下: 1.int ...
- java中字符串的精确匹配_Java最佳实践–字符串性能和精确字符串匹配
java中字符串的精确匹配 在使用Java编程语言时,我们将继续讨论与建议的实践有关的系列文章,我们将讨论String性能调优. 我们将专注于如何有效地处理字符串创建, 字符串更改和字符串匹配操作. ...
- [转载] Java 中字符串转整型和整型转字符串
参考链接: Java中的字符串到整数– parseInt() Java 中字符串转整型和整型转字符串 1.字符串转整型Java代码,字符串为纯数字的情况下,调用Integer的静态方法parseInt ...
- Java中字符串中子串的查找共有四种方法(indexof())
2019独角兽企业重金招聘Python工程师标准>>> public class FirstDemo { /** *API中String的常用方法 */ // 查找指定字符串是否存在 ...
- java中字符串 MD5密码的加密与验证
java中字符串 MD5密码的加密与验证 MD5即Message-Digest Algorithm 5(信息-摘要 算法 5),用于确保信息传输完整一致.是计算机广泛使用的杂凑算法之一(又译 摘要 ...
- Java 中字符串转整型和整型转字符串
Java 中字符串转整型和整型转字符串 1.字符串转整型 Java代码,字符串为纯数字的情况下,调用Integer的静态方法parseInt或者valueOf Java代码,如果单个字符或字符串,需要 ...
- Java中字符串的比较
"=="比较两个对象时,比较的是两个对象的内存地址 equals() 比较的是对象的内容(区分字母的大小写) 一.用"=="方法: (1)String a=&q ...
- java中字符串不等于_java中字符串不等于怎么判断
java中字符串不等于可以使用equals()方法判断,equals()方法用于将字符串与指定的对象比较. 语法public boolean equals(Object anObject) 参数 an ...
- java中字符串的创建_【转载】 Java中String类型的两种创建方式
本文转载自 https://www.cnblogs.com/fguozhu/articles/2661055.html Java中String是一个特殊的包装类数据有两种创建形式: String s ...
- JAVA中字符串连接效率的测试(续)
原:http://www.54xue.com/w/39/n-10839.html 分别测试了n=10,100,500,1000,5000,10000,20000的时候,三个对象连接字符串所花费的时间, ...
最新文章
- 京东裁员杀红眼了!说要给n+1,员工签字后,公司又反悔了!
- xutils设置能够使webview接受第三方cookie,版本低于api21如何设置
- 牛客练习赛44 B	小y的线段 (思维)
- RestTemplate.getForObject返回List的时候处理方式
- ldap java 对象 存储_java - 修改UID在LDAP存储库 - SO中文参考 - www.soinside.com
- 使用PowerShell和T-SQL在多服务器环境中规划SQL Server备份和还原策略
- vue-router的beforeEach的使用?
- 创建visual basic2005 数据库
- PHP正则提取超链接地址及标题,PHP正则表达式提取超链接及其标题
- PCB工程的BOM表设置隔行隔列显示不同颜色操作方法
- Web页面无法执行CGI的exe程序
- Learn OpenCV之Rotation Matrix To Euler Angles
- 手把手教你搭建属于自己的技术博客
- NVIDIA SPADE 风景合成
- 双系统,win7重装后,找回linux
- 复旦大学计算机科学与技术,复旦大学计算机科学技术学院
- openstack ironic standalone 方式部署
- 手动给无线网设置一个DNS服务器地址,手动修改手机局域网无线网络的DNS地址
- ASP.NET入门教程(经典)
- 喝什么对眼睛好呢!!
热门文章
- 【VMware vSAN 6.6】2.5.硬件部署选项:我们有软硬件项目解决方案
- 活动目录的灾难恢复操作指导之三
- 《网络安全原理与实践》一1.2 资产确定
- Android开发常用工具推荐
- ubuntu 清空/tmp目录
- Java替代C语言的可能性
- iphone 方法总结
- 获得字典中的最后一个元素python_Python从入门到熟练(5): 数据类型进阶
- 江苏省计算机考试Python用书,【关注】Python列入高考内容以及全国计算机等级考试!...
- 信息学奥赛一本通(1324:【例6.6】整数区间)