码迷,mamicode.com
首页 > 编程语言 > 详细

Java字符串池

时间:2018-01-16 13:53:45      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:main   string   text   []   intern方法   等于   als   模型   har   

1. String的两个构造函数

private final char value[];
private int hash;

public String() {
    this.value = "".value;
}
public String(String original) { this.value = original.value; this.hash = original.hash; }

2. new String中创建几个String对象?

1)创建两个String对象

public static void main(String[] args) {
    String y = new String("hello");
}

内存模型如下:

技术分享图片

2)创建一个String对象

public static void main(String[] args) {
    String x = "hello";
    String y = new String("hello");
}

内存模型如下:

技术分享图片

3. String的intern方法

String类私有地维护着一个初始为空的字符串池,当调用intern方法时:

1. 若字符串池中已包含一个等于此String对象的字符串(用 equals方法确定),则返回池中的字符串。
2. 否则,将此String对象添加到池中,并返回此String对象的引用。

public native String intern();

字符串池中存放的是String对象引用,而不是String对象本身。

实验:

public static void main(String[] args) {
    String x = "hel";
    x += "lo";
    String y = "ja";
    y += "va";
    System.out.println(x == x.intern()); // true
    System.out.println(y == y.intern()); // false
}

y == y.intern()为false说明字符串池中已存在"java",JVM启动时在字符串池中加载的字符串还包括:"true"、"false"...

内存模型:

intern前

技术分享图片

intern后

技术分享图片

Java字符串池

标签:main   string   text   []   intern方法   等于   als   模型   har   

原文地址:https://www.cnblogs.com/bjorney/p/8295958.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!