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()方法会判断常量池是否有该字符串, ...
随机推荐
- 容忍和污点Taint和Toleration
说明: Taint在一类服务器上打上污点,让不能容忍这个污点的Pod不能部署在打了污点的服务器上. Toleration是让Pod容忍节点上配置的污点,可以让一些需要特殊配置的Pod能够调用到具有 污 ...
- HashMap排序题
HashMap排序题 题目 已知一个 HashMap<Integer,User>集合, User 有 name(String)和 age(int)属性. 请写一个方法实现对HashMap ...
- Mysql数据库基础第七章:流程控制结构
Mysql数据库基础系列 软件下载地址 提取码:7v7u 数据下载地址 提取码:e6p9 mysql数据库基础第一章:(一)数据库基本概念 mysql数据库基础第一章:(二)mysql环境搭建 mys ...
- VUE学习-条件渲染
条件渲染 v-if & v-else-if & v-else <div id="app"> <h1 v-if="type == 'VUE ...
- git 的提交与合并
1,创建远程仓库 不论是用命令行还是码云之类的都可以 2,git clone url 这是将远程仓库库提交到本地 3, git checkout -b dev 创建dev分支并切换到dev ...
- gitignore文件中忽略项不起作用的解决方法
在使用git的时候会遇到这样的情况,我们生产的一些class或者target的目录,我不能提交,这个时候我们需要使用gitignore,但是有的时候虽然添加了,但是不起作用. 情况:开发过程中,我们自 ...
- angular 路由守卫Observable异步请求串联
假设路由守卫有这种场景 需要使用observable同时发送多个Http 请求,判断request2返回的数据中是否存在request1返回的数据 使用async await export class ...
- 题解 【POJ3728】The merchant(LCA)
题意:一棵树有N个城市,每个城市商品价格不一样,Q个询问,问从u出发到达v点,每个城市只能经过一次的最大利润 max min数组存u城到u的第2^i个祖先路径上的最值 答案就是u-v路径上的最大值-最 ...
- Java笔记_this关键字_HomeWork(5 - 9 题)
第五题 /** * @ClassName HomeWork05 * @Description TODO * @Author Orange * @Date 2021/4/25 10:09 * @Vers ...
- 12组-Beta冲刺-3/5
一.基本情况 队名:字节不跳动 组长博客:https://www.cnblogs.com/147258369k/p/15599024.html Github链接:https://github.com/ ...