美文网首页
字符串常量池

字符串常量池

作者: lenny611 | 来源:发表于2018-11-29 21:11 被阅读0次

java中字符串创建的两种形式:

1.直接给String变量赋值,即字面量形式;

2.用new创建字符串对象;

这两种方式存在性能和内存的差别,JVM(java虚拟机)为了减少重复字符串对象的创建,开辟了一块内存,这块内存被称为字符串常量池或者字符串字面量池。

其工作原理: 当代码中出现字面量形式创建字符串对象时,JVM首先会对这个字面量进行检查,如果字符串常量池中存在相同内容的字符串对象的引用,则将这个引用返回,否则新的字符串对象被创建,然后将这个引用放入字符串常量池,并返回该引用。

如:

String s1="a";

String s2="a";

String s3=new String("a");

s1==s2结果为true;而s1==s3结果为false;间接说明了s1和s3指向的是不同的对象;

如何把自己的一个字符串加入字符串常量池?

使用intern方法,如String s4=s3.intern();调用该方法时,JVM首先会去检查是否有s3对象的引用,有则将该引用返回并给s4;

补充:实现前提 (引用了他人的)

  字符串常量池实现的前提条件就是Java中String对象是不可变的,这样可以安全保证多个变量共享同一个对象。如果Java中的String对象可变的话,一个引用操作改变了对象的值,那么其他的变量也会受到影响,显然这样是不合理的。

优缺点

字符串常量池的好处就是减少相同内容字符串的创建,节省内存空间。

如果硬要说弊端的话,就是牺牲了CPU计算时间来换空间。CPU计算时间主要用于在字符串常量池中查找是否有内容相同对象的引用。不过其内部实现为HashTable,所以计算成本较低。

相关文章

  • 字符串常量池

    静态常量池,运行期常量池,字符串常量池 静态常量池 运行时常量池 字符串常量池 问题 结果: 验证new Stri...

  • Java中的常量池

    Java中的常量池分为三类:字符串常量池、class常量池、运行时常量池 字符串常量池 从1.7及其之后,字符串常...

  • JVM-常量池

    JVM-常量池 JVM常量池分为 Class文件常量池 运行时常量池 全局字符串常量池 基本类型包装类对象常量池 ...

  • 深入浅出JVM常量池

    常量池在JVM中分为三种:字符串常量池,运行时常量池,Class常量池讨论范围 JDK 1.7版本及以后 字符串常...

  • 你对常量池够了解吗

    在 java 中,常量池分为以下三种: class 常量池 字符串常量池 运行时常量池 一、class 常量池 1...

  • 彻底弄懂java中的常量池

    JVM有几种常量池 主要分为: Class文件常量池、运行时常量池,全局字符串常量池,以及基本类型包装类对象常量池...

  • java-为什么String要设计成不可变的?

    1 字符串常量池的需要 字符串常量池(String pool,String intern pool, String...

  • JVM内存划分 字符串常量池

    字符串常量池 【字符串常量池】独立于【运行时常量池】Java 6只能增加永久代-XX:MaxPermSize=1G...

  • p4-equals系列:jdk1.6中,JVM字符串常量池在哪里

    在jdk 1.6及以前,字符串常量池是属于运行时常量池的,运行时常量池属于方法区,所以可以说字符串常量池位于方法区...

  • 为什么String要设计成不可变的?

    1. 字符串常量池的需要 字符串常量池(String pool,String intern pool, Strin...

网友评论

      本文标题:字符串常量池

      本文链接:https://www.haomeiwen.com/subject/jbrqcqtx.html