我们再来看一段代码:

运行一下:

没错,一个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)相关推荐

  1. 【转】Java中字符串中子串的查找共有四种方法(indexof())

    原文网址:http://wfly2004.blog.163.com/blog/static/1176427201032692927349/ Java中字符串中子串的查找共有四种方法,如下: 1.int ...

  2. java中字符串的精确匹配_Java最佳实践–字符串性能和精确字符串匹配

    java中字符串的精确匹配 在使用Java编程语言时,我们将继续讨论与建议的实践有关的系列文章,我们将讨论String性能调优. 我们将专注于如何有效地处理字符串创建, 字符串更改和字符串匹配操作. ...

  3. [转载] Java 中字符串转整型和整型转字符串

    参考链接: Java中的字符串到整数– parseInt() Java 中字符串转整型和整型转字符串 1.字符串转整型Java代码,字符串为纯数字的情况下,调用Integer的静态方法parseInt ...

  4. Java中字符串中子串的查找共有四种方法(indexof())

    2019独角兽企业重金招聘Python工程师标准>>> public class FirstDemo { /** *API中String的常用方法 */ // 查找指定字符串是否存在 ...

  5. java中字符串 MD5密码的加密与验证

    java中字符串 MD5密码的加密与验证   MD5即Message-Digest Algorithm 5(信息-摘要 算法 5),用于确保信息传输完整一致.是计算机广泛使用的杂凑算法之一(又译 摘要 ...

  6. Java 中字符串转整型和整型转字符串

    Java 中字符串转整型和整型转字符串 1.字符串转整型 Java代码,字符串为纯数字的情况下,调用Integer的静态方法parseInt或者valueOf Java代码,如果单个字符或字符串,需要 ...

  7. Java中字符串的比较

    "=="比较两个对象时,比较的是两个对象的内存地址 equals() 比较的是对象的内容(区分字母的大小写) 一.用"=="方法: (1)String a=&q ...

  8. java中字符串不等于_java中字符串不等于怎么判断

    java中字符串不等于可以使用equals()方法判断,equals()方法用于将字符串与指定的对象比较. 语法public boolean equals(Object anObject) 参数 an ...

  9. java中字符串的创建_【转载】 Java中String类型的两种创建方式

    本文转载自 https://www.cnblogs.com/fguozhu/articles/2661055.html Java中String是一个特殊的包装类数据有两种创建形式: String s ...

  10. JAVA中字符串连接效率的测试(续)

    原:http://www.54xue.com/w/39/n-10839.html 分别测试了n=10,100,500,1000,5000,10000,20000的时候,三个对象连接字符串所花费的时间, ...

最新文章

  1. 京东裁员杀红眼了!说要给n+1,员工签字后,公司又反悔了!
  2. xutils设置能够使webview接受第三方cookie,版本低于api21如何设置
  3. 牛客练习赛44 B 小y的线段 (思维)
  4. RestTemplate.getForObject返回List的时候处理方式
  5. ldap java 对象 存储_java - 修改UID在LDAP存储库 - SO中文参考 - www.soinside.com
  6. 使用PowerShell和T-SQL在多服务器环境中规划SQL Server备份和还原策略
  7. vue-router的beforeEach的使用?
  8. 创建visual basic2005 数据库
  9. PHP正则提取超链接地址及标题,PHP正则表达式提取超链接及其标题
  10. PCB工程的BOM表设置隔行隔列显示不同颜色操作方法
  11. Web页面无法执行CGI的exe程序
  12. Learn OpenCV之Rotation Matrix To Euler Angles
  13. 手把手教你搭建属于自己的技术博客
  14. NVIDIA SPADE 风景合成
  15. 双系统,win7重装后,找回linux
  16. 复旦大学计算机科学与技术,复旦大学计算机科学技术学院
  17. openstack ironic standalone 方式部署
  18. 手动给无线网设置一个DNS服务器地址,手动修改手机局域网无线网络的DNS地址
  19. ASP.NET入门教程(经典)
  20. 喝什么对眼睛好呢!!

热门文章

  1. 【VMware vSAN 6.6】2.5.硬件部署选项:我们有软硬件项目解决方案
  2. 活动目录的灾难恢复操作指导之三
  3. 《网络安全原理与实践》一1.2 资产确定
  4. Android开发常用工具推荐
  5. ubuntu 清空/tmp目录
  6. Java替代C语言的可能性
  7. iphone 方法总结
  8. 获得字典中的最后一个元素python_Python从入门到熟练(5): 数据类型进阶
  9. 江苏省计算机考试Python用书,【关注】Python列入高考内容以及全国计算机等级考试!...
  10. 信息学奥赛一本通(1324:【例6.6】整数区间)