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
}
}

最新文章

  1. windows10搭建django1.10.3+Apache2.4
  2. SBT 构建scala eclipse开发
  3. MVC程序实现Autocomplete功能
  4. live555学习之基本类介绍及计划任务深度探讨
  5. Linux下修改MySQL编码的方法
  6. 实现O(1)时间复杂度带有min和max 函数的栈
  7. winsock编程IOCP模型实现代码
  8. linux cut命令详解
  9. 帝国CMS Table '***.phome_ecms_news_data_' doesn't exist
  10. CSS从零开始(1)--CSS基础语法
  11. iOS上手指点击波纹效果的实现
  12. Linux 学大纲
  13. JavaScript 高阶函数
  14. 算法提高 11-1实现strcmp函数
  15. hibernate查询oracle数据库表报错SQL state [null]; error code [17027]; 流已被关闭; nested exception is java.sql.SQLException: 流已被关闭
  16. ubuntu播放音频没声音
  17. Ubuntu 14.04 修改时区
  18. api 和 C# 里的接口的区别?
  19. MVC下载(存在文件的情况)
  20. Vue.js之常用指令

热门文章

  1. webdriver中的定位\模拟\及实例
  2. sudo的简单用法
  3. cin,cin.get(),cin.getline(),gets(),getchar()函数的用法
  4. java9小工具jshell
  5. IntelliJ Pycharm 2019年最新版 安装激活教程【最强,可用至2089、2100年】
  6. H5_0016:js获取网络中配置文件中的参数
  7. JS添加和删除表格行
  8. display: inline-block 布局
  9. web服务器、Web中间件和Web容器的区别
  10. selenium统计网页加载时间