结合字符串常量池/String.intern()/String Table来谈一下你对java中String的理解
2024-09-01 13:36:45
1、字符串常量池
每创建一个字符串常量,JVM会首先检查字符串常量池,如果字符串已经在常量池中存在,那么就返回常量池中的实例引用。如果字符串不在池中,就会实例化一个字符串放到字符串池中。常量池提高了JVM性能和内存开销
2、用new 的方式创建字符串
new方式创建字符串,会先检查常量池中是否有相同值的字符串。如果有,则拷贝一份到堆中,然后返回堆中的地址。如果没有,则在堆中创建一份,然后返回堆中的地址。
3、String Table
String Table存放的是string的cache table,用于存放字符串常量的引用的表,避免产生新的string的开销。它的结构类似于我们常用的hashtable
4、String.intern()
intern用来返回常量池中的某字符串,如果常量池中已经存在该字符串,则直接返回常量池中该对象的引用。否则,在常量池中加入该对象,然后 返回引用。
package myProject; public class StringTest {
public static void main(String[] args) { String s1="hello";
String s2="hello";
String s3 =new String("hello");
System.out.println(s1==s2);//true
System.out.println(s2==s3);//false
String s4=s3.intern();
System.out.println(s2==s4);//true
}
}
最新文章
- windows10搭建django1.10.3+Apache2.4
- SBT 构建scala eclipse开发
- MVC程序实现Autocomplete功能
- live555学习之基本类介绍及计划任务深度探讨
- Linux下修改MySQL编码的方法
- 实现O(1)时间复杂度带有min和max 函数的栈
- winsock编程IOCP模型实现代码
- linux cut命令详解
- 帝国CMS Table '***.phome_ecms_news_data_' doesn't exist
- CSS从零开始(1)--CSS基础语法
- iOS上手指点击波纹效果的实现
- Linux 学大纲
- JavaScript 高阶函数
- 算法提高 11-1实现strcmp函数
- hibernate查询oracle数据库表报错SQL state [null]; error code [17027]; 流已被关闭; nested exception is java.sql.SQLException: 流已被关闭
- ubuntu播放音频没声音
- Ubuntu 14.04 修改时区
- api 和 C# 里的接口的区别?
- MVC下载(存在文件的情况)
- Vue.js之常用指令
热门文章
- webdriver中的定位\模拟\及实例
- sudo的简单用法
- cin,cin.get(),cin.getline(),gets(),getchar()函数的用法
- java9小工具jshell
- IntelliJ Pycharm 2019年最新版 安装激活教程【最强,可用至2089、2100年】
- H5_0016:js获取网络中配置文件中的参数
- JS添加和删除表格行
- display: inline-block 布局
- web服务器、Web中间件和Web容器的区别
- selenium统计网页加载时间