String s1 = "Programming";   s1在栈内存中,Programming在常量池中。

String s2 = new String("Programming");    s2在栈内存中,new String("Programming")在堆内存中,Programming字面量在常量池中(方法区?还不太清楚是不是一回事)。

s1指向常量池,s2指向堆内存中的new对象,故s1==s2为false。

s3和s4和s1道理相同。

s5在JVM优化后同s1相同。故s1==s5为true。

s6相当于创建了新的对象,把s3+s4赋值给s6。

s1指向常量池,s6指向堆内存中的新创建对象,故s1==s6为false。

s6.intern(),首先检查s6的值是否在常量池中,如果在,则返回对常量池中的引用(此处是jdk1.7以上版本,以下的则是返回指向堆内存中的引用),如果不在则把值加入到常量池中后并返回指向常量池的引用。故s1==s6.intern()为true。

同理,s2.intern(),因常量池中已存在值,故返回指向常量池的引用,s2本身是指向堆内存的引用,故s2==s2.intern()为false。

最新文章

  1. 终端指令操作创建Django项目
  2. HTML之CSS学习
  3. 将一个Asp.Net网站改为MVC
  4. AngularJS - Passing data between pages
  5. 【随笔】从gitHub上获取源码
  6. wamp密码设置
  7. iOS开发备忘录:实现多StoryBoard之间跳转
  8. WCF与ASMX Web服务差异比较[译]
  9. PHP使用CURL上传|下载文件
  10. ./configure会报错:pr command not found
  11. C++ IO 详细用法
  12. BZOJ 1816: [Cqoi2010]扑克牌( 二分答案 )
  13. 转:【Java并发编程】之二:线程中断(含代码)
  14. OpenCV 透视变换实例
  15. 【链表问题】打卡9:将单链表的每K个节点之间逆序
  16. opencv学习之路(30)、分水岭算法及图像修补
  17. 20172302 《Java软件结构与数据结构》第七周学习总结
  18. win10更新后,可以远程桌面ping也没问题,但是无法访问共享文件夹的解决方法
  19. Access-Control-Allow-Origin实现跨域访问 跨域
  20. redis高可用 - redis集群

热门文章

  1. mysql库操作msyql
  2. JavaWeb 之 Cookie
  3. pytest框架增加log打印(包括pytest的执行结果、自定义的log信息)
  4. day01-java流程
  5. npm报错最好的办法就是删掉依赖然后重装
  6. 设置导航栏的title
  7. 2、Maven
  8. URLDecoder.decode() 特殊字符的处理
  9. 推荐优秀国产蓝牙芯片-HS6621CxC系列
  10. 数据表主键设置自增后插入数据的mabatis写法