String intern的理解


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。
String intern的理解的更多相关文章
- Java提高篇——理解String 及 String.intern() 在实际中的应用
1. 首先String不属于8种基本数据类型,String是一个对象. 因为对象的默认值是null,所以String的默认值也是null:但它又是一种特殊的对象,有其它对象没有的一些特性. 2. ...
- 几张图轻松理解String.intern()
https://blog.csdn.net/soonfly/article/details/70147205 在翻<深入理解Java虚拟机>的书时,又看到了2-7的 String.inte ...
- 关于jvm中的常量池和String.intern()理解
1. 首先String不属于8种基本数据类型,String是一个对象. 因为对象的默认值是null,所以String的默认值也是null:但它又是一种特殊的对象,有其它对象没有的一些特性. 2. ne ...
- 【转载】几张图轻松理解String.intern()
出处:https://blog.csdn.net/soonfly/article/details/70147205 在翻<深入理解Java虚拟机>的书时,又看到了2-7的 String.i ...
- 对String Intern()方法的理解
今天重新看了一点周志明大佬的<深入理解Java虚拟机>,发现这个地方讲的不是很透彻,在网络上看到一些博客基本也都是在搬运原文,搞得一头雾水.弄了半天算是彻底明白了,做一下笔记. 搬运一下原 ...
- 深入理解Java String#intern() 内存模型
原文出处: codelog.me 大家知道,Java中string.intern()方法调用会先去字符串常量池中查找相应的字符串,如果字符串不存在,就会在字符串常量池中创建该字符串然后再返回. 字符串 ...
- 结合字符串常量池/String.intern()/String Table来谈一下你对java中String的理解
1.字符串常量池 每创建一个字符串常量,JVM会首先检查字符串常量池,如果字符串已经在常量池中存在,那么就返回常量池中的实例引用.如果字符串不在池中,就会实例化一个字符串放到字符串池中.常量池提高了J ...
- String放入运行时常量池的时机与String.intern()方法解惑
运行时常量池概述 Java运行时常量池中主要存放两大类常量:字面量和符号引用.字面量比较接近于Java语言层面的常量概念,如文本字符串.声明为final的常量值等. 而符号引用则属于编译原理方面的概念 ...
- Java String 常量池理解
String:字符串常量池 作为最基础的引用数据类型,Java 设计者为 String 提供了字符串常量池以提高其性能,那么字符串常量池的具体原理是什么,我们带着以下三个问题,去理解字符串常量池: 字 ...
- string.intern
在翻<深入理解Java虚拟机>的书时,又看到了2-7的 String.intern()返回引用的测试. 总结一句话: jdk1.7之前,调用intern()方法会判断常量池是否有该字符串, ...
随机推荐
- codeforce A. Many Equal Substrings
http://codeforces.com/contest/1029/problem/A 嗳,简单的题做起来是真的舒服qwq 1 public static void main(String[] ar ...
- python容易被忽略的问题
1.int()强制转换浮点数 在int()的强制转换浮点数时候,不管是正数还是负数,只取整数部分. print(int(6.235)) # 6 print(int(-6.235)) # -6 注意:这 ...
- 前端 ArrayBuffer 与 Blob 互转
我们在使用ajax向后端发送请求时,responseType可以设置返回数据的格式,它支持的格式有"text"."arraybuffer"."blob ...
- shell脚本:报错syntax error near unexpected token `$'\r''解决方法
之前的shell脚本是在服务器上编写的,后来又已复制的方式存在在了电脑上,以txt文件的形式存放的.于是复制到了编辑工具中,进行了相应项的修改.修改完毕后,拿到服务器上测试,结果执行sh XXX.sh ...
- 083_SFDC Limit(二) 及良好的开发习惯
关于常见开发中遇到的limit,应如何处理:https://developer.salesforce.com/page/Apex_Code_Best_Practices 链接内容很好,就不一一做解释 ...
- Flurl 组件使用
简介 先发上官网地址:https://flurl.dev/ Flurl 是一个异步的.可测试的.可移植的.URL 构建器和 .NET 的 HTTP 客户端库:Flurl 在NuGet上可用,可免费用于 ...
- GridView.RowCellClick Event
Fires when a user clicks a data cell. If data is editable and the ColumnViewOptionsBehavior.EditorSh ...
- .net code 3.0 获取配置文件 json 和 config 中的值
using Microsoft.Extensions.Configuration;using Microsoft.Extensions.FileProviders; using System.IO; ...
- 使用EmguCV3.0.0调用摄像头并设置帧率
此教程使用emgu3.0.0,其他版本兼容性未知. 转载请注明出处: http://www.cnblogs.com/zaiyuzhong/p/open-camera-with-emgu3_0_0.ht ...
- Netty实战学习笔记
第一部分 Netty的概念及体系结构 1.Netty异步和事件驱动 2.你的第一款Netty应用程序 3.Netty的组件和设计 4.传输 5.ByteBuf 6.ChannelHandler和Cha ...