我想对于String这个类,没有谁对它陌生吧。可以说是无论在哪个项目中都是可以用到的。

那么反问一下你,你确定你对于String已经是真的了解了吗?你是否清楚String的内存分配?你是否清楚字节码文件中,它是如何的?你是否清楚创建String对象时,它牵扯到那几个知识点勒?一起来讨论吧。

”八小时内谋生活,八小时外谋发展“

共勉

封面地点:湖南永州市蓝山县舜河村

作者:用心笑*

注: 本文讨论的String 是Jdk8中的。

一、String基本特性

1.1、基础知识

  1. String 的创建方式

    • String str1 = “你好丫”; 采取字面量的定义方式,字符串会存储在公共池中
    • String str2 =new String(“hello”); 采取new 对象的方式,会存储在堆中
  2. String 声明是final类型的,不可继承。

  3. String 实现了SerializableComparable接口:即字符串是支持序列化和比较大小的。

    public final class String implements java.io.Serializable, Comparable<String>
    
  4. String在JDK 8 及之前,内部定义了``private final char[] value;来存储字符串数据。但在jdk9 和11中已经改变为:private final byte[] value;`来存储字符串数据。

    我的电脑中暂时只有这几个版本,之后有空了会全部验证,大家也可以给出建议

1.2、大家想一想为什么会作出这样的改变勒?

官网

The current implementation of the String class stores characters in a char array, using two bytes (sixteen bits) for each character. Data gathered from many different applications indicates that strings are a major component of heap usage and, moreover, that most String objects contain only Latin-1 characters. Such characters require only one byte of storage, hence half of the space in the internal char arrays of such String objects is going unused.

译为:

String类的当前实现将字符存储在字符数组中,每个字符使用两个字节(16位)。从许多不同的应用程序收集的数据表明,字符串是堆使用的主要组成部分,而且,大多数字符串对象只包含拉丁字符1。这些字符只需要一个字节的存储空间,因此这些字符串对象的内部字符数组中有一半的空间没有使用。

这次让我们从字节码文件来重新认识String,文末有两个小小面试题,一起来试一试相关推荐

  1. java jpg结构_Java Class 字节码文件结构分析----附带逐字节码分析图

    欢迎访问我的博客,同步更新: 枫山别院 今天给大家分享下Java Class字节码文件的结构解析.(文末附有详细大图) 代码 首先我们创建一个Java类,然后添加一些成员变量和方法,如下: publi ...

  2. java中计算一个文件的总字节数_【JVM故事】一个Java字节码文件的诞生记

    作者:李新杰·转自微:信公众号"编程新说" 万字长文,完全虚构.(12000字) (一) 组里来了个实习生,李大胖面完之后,觉得水平一般,但还是留了下来,为什么呢?各自猜去吧. 李 ...

  3. 【Groovy】编译时元编程 ( 编译 ASTTransformation | 打包 ASTTransformation 字节码文件 | 编译 Groovy 类同进行编译时处理 )

    文章目录 一.编译 ASTTransformation 二.打包 ASTTransformation 字节码文件 三.编译 Groovy 类同进行编译时处理 一.编译 ASTTransformatio ...

  4. 【Groovy】Groovy 脚本调用 ( Groovy 脚本编译 | Groovy 脚本字节码文件分析 )

    文章目录 一.Groovy 脚本编译 二.Groovy 脚本字节码文件分析 一.Groovy 脚本编译 Groovy 脚本编译后的字节码文件是一个继承 Script 的类 ; 编译下面的 Script ...

  5. 【Groovy】闭包 Closure ( 闭包定义 | 闭包类型 | 查看编译后的字节码文件中的闭包类型变量 )

    文章目录 一.闭包定义 二.闭包类型 三.查看编译后的字节码文件中的闭包类型变量 一.闭包定义 闭包 Closure 是 Groovy 中最常用的特性 , 使用闭包作为参数是 Groovy 语言的明显 ...

  6. 【Android 逆向】类加载器 ClassLoader ( 使用 DexClassLoader 动态加载字节码文件 | 拷贝 DEX 文件到内置存储 | 加载并执行 DEX 字节码文件 )

    文章目录 一.拷贝 Assets 目录下的 classes.dex 字节码文件到内置存储区 二.加载 DEX 文件并执行其中的方法 三.MainActivity 及执行结果 四.博客资源 一.拷贝 A ...

  7. 【开发环境】Android 命令行中执行 Java 程序 ( IntelliJ IDEA 中创建 Java / Kotlin 工程 | dx 打包 DEX 字节码文件 | dalvikvm 命令 )

    文章目录 前言 一.IntelliJ IDEA 中创建 Java / Kotlin 工程 二.准备 Java 和 Kotlin 代码 三.编译在 PC 上可执行的 Java / Kotlin JAR ...

  8. 【Java 虚拟机原理】Class 字节码二进制文件分析 二 ( 常量池位置 | 常量池结构 | tag | info[] | 完整分析字节码文件中的常量池二进制数据 )

    文章目录 前言 一.常量池结构分析 1.常量池位置 2.常量池结构 3.常量池单个常量 4.常量池单个常量 tag 标签 二.常量池字节码文件分析 0.常量池附加信息 1.常量池 #1 常量分析 2. ...

  9. 【Java 虚拟机原理】Class 字节码二进制文件分析 一 ( 字节码文件附加信息 | 魔数 | 次版本号 | 主版本号 | 常量池个数 )

    文章目录 一.字节码文件 与 JVM 二.字节码文件示例 三.字节码文件二进制结构分析 1.魔数 2.次版本号 3.主版本号 4.常量池个数 一.字节码文件 与 JVM Java 源码编译成 Clas ...

最新文章

  1. 异步接口同步返回_同步|异步
  2. ssh终端远程登陆主机命令--笔记
  3. 从php传过来的是字符串吗,PHP 字符串
  4. 单个下拉框数据保持问题
  5. python socket清空接受区_用Python制作只属于你和ta的聊天渠道吧
  6. 通过Ajax解析和jQuery写了一个小小的导航条
  7. 14.Linux 高性能服务器编程 --- 多线程编程
  8. java pdf替换文字_java 查找替换pdf中的指定文本
  9. 使用select2 实现拼音全拼和首字母 搜索
  10. 程序动态分析工具调研
  11. SQL 查询语句报错
  12. 阿里 java 开发手册
  13. Java程序获取和修改.wav音频文件的内部结构
  14. LocalDate的用法与String互转
  15. 四个厚膜高阻抗电阻测量
  16. 计算机网络——路由算法
  17. (附源码)springboot万花筒 毕业设计 345600
  18. 中台的问题,是技术的问题,还是人的问题
  19. Q1利润不及预期股价仍大涨,疫情“摧残”下Facebook求生有新机?
  20. 从100PV到1亿级PV网站架构演变

热门文章

  1. 物料单位转换的两个函数
  2. 百度二次上市涨0.79%,错过移动互联网热潮后牌怎么出?
  3. 手里的基金在震荡?数据解读2021“开门红”如何控制仓位
  4. 年入百万还是低龄低收入?9.04亿网民的真实面目,都藏在这些数据里
  5. 多个硬件体验如一,华为终端分布式技术会重构IoT生态吗?
  6. mysql换数据存储路径,mysql查看和修改数据存储路径并转移数据
  7. Linux中log的目录,/var/log目录中Linux日志文件的功能详解
  8. 网站计数器 php,网站计数器 php
  9. python数据爬虫课程_数据分析之Python3爬虫视频课程
  10. java实现123n_用Java编程 :输入一个正整数n,输出n!的值。 其中n!=1*2*3*…*n。 求高手指点...