【Java进阶知识】关于String、Integer内存分析——常量池

本文深入探讨Java中的String和Integer类与常量池的关系。通过分析String的创建方式,如直接创建、new操作、字面量相加和intern方法,解释了对象在内存中的存储位置。同时,讨论了Integer在不同数值范围内的内存处理,以及包装类在比较时的行为。通过对代码实例的解析,帮助读者理解Java内存管理和常量池的工作原理。
摘要由CSDN通过智能技术生成

对于字符串String的学习一直是迷迷糊糊,但这块知识却也是重点,要想真正的搞懂不仅要清楚的知道Java中的内存模型,也要能准确区分各种创建好的对象的存储位置。在自己看了深入理解Java虚拟机这本书后,结合多篇博客,才感觉稍微入门,用这篇博客总结记录一下自己理解下的字符串常量池。

String

一、关于String类

之前写过关于String类的简单认识—>字符串String类可供参考

二、常量池

关于Java内存模型参照—>Java虚拟机中的内存区域
这里再着重说一下常量池的概念。运行时常量池和字符串常量池之间有什么关系呢?
在Java虚拟机中常见的几种常量池:class文件常量池、运行时常量池、字符串常量池

  • Class文件常量池:主要运用编译时期产生的字面量和符号引用
    其中,字面量类似常量包括String类型的值和final修饰的变量。
  • 运行时常量池:Class文件会在类加载后进入方法区,就称之为运行时常量池
  • 字符串常量池:在jdk1.6时,字符串常量池就存在与方法区中,在jdk1.7版本后,字符串常量被移到了堆中。因此1.7版本后,字符串常量池就没有存在于运行常量池中了。
    接下来,让我们看一段代码:

三、代码分析

让我们看看下面一段代码中的问题:

问题一:
public class StringDemo {
   
    public static void main(String[] args) {
   
        String s1 = "abc";
        String s2 = new String("abc");
        String s3 = new String("abc");
        String s4 = "a" + "bc";
        String s5 = new String("a")+new String("bc");
        String s6 = new String("a");
        String s7 = new String("bc");
        String s8 = s6 + s7;
        String s9 = s2.intern();

        System.out.println(s1 == s2); // false
        System.out.println(s2 == s3);
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值