| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> 浅谈String对象创建 -> 正文阅读 |
|
[Java知识库]浅谈String对象创建 |
关于String对象创建的问题前言这里的思路的话,从代码入手就不太合适了,就写吧! 一丶关于常量池需要了解的东西在JVM中大致被划分为了五个区域: 我们在这一部分,最经常提到的就是“字符串常量池”,它是在堆当中的。 而常量池并不仅仅只是这一个。下面给出具体:
(1)class常量池(静态常量池)这里的静态常量池其实就是class常量池。class常量池实际上就是一个二进制数据流,和数组有些类似。
(2)运行时常量池运行时常量池是方法区的一部分,我们class文件编辑好了,现在该解释运行到JVM内存里面了。在这个时候,就会生成运行时的常量池。 我们知道,一个完整的class文件,也就是这个类被执行的过程总共要分为加载,验证,准备,解析,初始化这几个阶段。而验证,准备,解析又被成为链接阶段。而当这个类被送入内存当中的时候,JVM就会把class常量池中的东西给送到运行时常量池当中,所以运行时常量池每个类都会有一个。 关于加载阶段
这里需要说明的点:
关 于 字 节 流 转 换 问 题 \color{red}{关于字节流转换问题} 关于字节流转换问题
关于解析阶段(resolve)这一个阶段也是我要提到的,因为resolve阶段玩的就是常量池。 (3)字符串常量池所谓字符串常量池,其实就是一个StringTable类,它本质上就是一个hash表,里面存的其实就是字符串的引用,而且这个字符串常量池被所有的类所共享。这是个纯运行时的结构,而且是惰性(lazy)维护的。注意它只存储对java.lang.String 实例的引用,而不存储 String 对象的内容。 注意,它只存了引用,根据这个引用可以得到具体的 String 对象。 二丶关于两种创建对象的方式(1)常量池储存字符串的方式首先,在讲解创建对象的具体方式之前的,要先知道字符串常量池当中储存字符串的具体方法。我们前面说了,字符串常量池的存储方式其实就是HashTable,这里的话笔者对这里的东西尽力叙述一下,因为真的把握不住。 (2)关于new和直接赋值这两种创建的方式的大概原理在之前都已经说过了,这里的话进行一下细化。 首先它们都会在栈上有引用地址,但是一个引用的是堆上的对象地址,一个是字符串常量池中的地址。 所以在这里: 三丶总结还是有点不太满意,对于字符串部分有点虎头蛇尾的感觉,想好好写好的,但是发现以自己目前的知识量不能很好的解释,所以后续等知识体系更加完善了,再好好补充一下吧。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 22:00:23- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |