由常量池 运行时常量池 String intern方法想到的(四)之 常量池

这篇文章
由常量池 运行时常量池 String intern方法想到的(三)之String内存模型 有网友评论,主要有以下两个问题:
(1)是不是每个类都有一个运行时常量池?
(2)在运行时常量池中存在的字符串是否是对象?
下面主要以示例的形式解释第一个问题,而第二个问题,我之前也有过疑惑,也问过其他网友,请看这个博文及评论:
String放入运行时常量池的时机与String.intern()方法解惑

是不是每个类都有一个运行时常量池?
不是每个类都有一个运行时常量池。

请看下面的例子:
Constant1.java

package org.fan.learn.string;

/**
 * Created by fan on 2016/10/8.
 */
public class Constant1 {

    public void test() {
        //String s1 = new String("12") + new String("3");
        //s1.intern();
        String s2 = new String("123");
        System.out.println(s2);
    }

    public static void main(String[] args) {
        Constant1 constant1 = new Constant1();
        Constant2 constant2 = new Constant2();
        constant1.test();
        constant2.test2();
    }
}

Constant2.java

package org.fan.learn.string;

/**
 * Created by fan on 2016/10/8.
 */
public class Constant2 {
    public void test2() {
        String s = new String("123");
        System.out.println(s);
    }
}

加断点之后,看Constant1中s2的“123”地址和Constant2中s的“123”的地址:
这里写图片描述

这里写图片描述

从上图可以看到,字符串对象”123”的地址都是461,所以不同的类其实使用的是同一个运行时常量池。
而且,运行时常量池是方法区的一部分,而方法区是所有线程共享的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值