• 刨析String对象常用的创建方式-日记篇


    String数据的存储:

    一般有new String的话,都会在堆中开辟一个空间存储常量池的地址;如果是直接String str = “str”;这样的方式的话就直接str指向常量池的字符串常量地址。

    在这里插入图片描述

    看到源码,String的数据存储是存储在一个final的char数组

    创建字符串的对象方式很多,其中有两种常用的:

    在这里插入图片描述

    这里的是当以s1的方式来创建,那么就会先查看常量池是否存在该字符串,如果存在,那么就直接地址指向该常量池的字符串地址;如果没有,那么直接在常量池开辟空间,创建该字符串常量,然后地址被s1指向。

    按照s2的方式,如果常量池有该字符串常量,那么,在堆里开辟空间value,地址为0x11,value存储的内容为常量池的地址0x99,s2指向value的地址;如果常量池没有,那么也要在常量池先造出"haha"这个字符串常量,然后再让堆的value保存常量池的字符串地址,s2指向value的地址。

    • 方式3

    String s = "hehe" + "haha"

    这个会在常量池创建一个字符串常量hehehaha然后让s指向该常量地址

    • 方式4

    在这里插入图片描述

    这里的a直接指向常量池的常量地址。有new的方式比如c则是在堆里再指向池里的对象。

    可以追一下源码:

    在这里插入图片描述

    看到这里是new一个,那么确实是要在堆中开辟一个空间来存储常量池的地址了,实锤了!

  • 相关阅读:
    数据结构基础知识回顾
    数据集-特征降维
    Android学习笔记 38. 网络加载框架Retrofit
    idea中配置spring boot单项目多端口启动
    【OI学习笔记】线性代数-高斯消元法
    【leetcode热题】 地下城游戏
    git常用命令
    XSS靶机通关以及XSS介绍
    [vue] XLSX 导出数据为excel
    sCrypt 合约中的椭圆曲线算法:第一部分
  • 原文地址:https://blog.csdn.net/ws_please/article/details/127950110