String源码详解

摘要:
因为它是由final修改的,所以它是一个不可继承的String类,以避免在被其他人继承后进行修改。几个字符串兄弟类2。本质上,它们是字符数组。同时,它们是不可变的。访问权限是私有的,因此不能在外部访问String类。因为它具有最终的修饰,所以它必须并且只能初始化一次,并且之后是不可变的。这是String类的第一个构造方法,在加载类时将调用该方法。初始化与参数字符串相同的String对象,该对象也是参数字符串的副本。

一、基本概念。

    1、继承实现关系。因为被final修饰,因此是不可继承的String类,避免被他人继承后修改。实现了三个接口。可序列、可比较,有序。几个String兄弟类

String源码详解第1张

    2、本质就是字符数组,同时,它是不可变的。

二、成员变量。

String源码详解第2张

     1、字符数组value。访问权限私有,因此String类外具有不可访问特点,因为具有final修饰,因此必须有且仅能初始化一次,而且之后不可变。初始化时机:要么定义时初始化,要么代码块初始化,要么构造方法。这是从JDK1.9开始用byte数组替换原来的char数组。

String源码详解第3张

     2、hash值。默认值为0

String源码详解第4张

     3、编码。默认值为0

String源码详解第5张

     1、字符编码为ISO-8859-1,即LATIN1的值为0。

String源码详解第6张

     1、字符编码UTF16的值为1。

String源码详解第7张

     1、COMPACT_STRINGS的值为true。类加载时就设置为true。

String源码详解第8张

三、成员方法。

     1、无参构造方法。这是String类的第一个构造方法,类加载的时候会调用。作者也注释说明了是用来实例化代表空字符序列的String对象,但是String具有不可变性,只要实例化一个就一直储存在堆中的常量池中。

String源码详解第9张

     2、字符数组字符串初始化。初始化一个与参数字符串一样的String对象,也是参数字符串的一个拷贝。除非明确地需要一个参数的拷贝,否则这个构造函数是没有必要的,因为String不可变

 String源码详解第10张

     3、字符数组初始化一个字符串。复制字符数组并转换成字符串,因此,转换之后,原来的字符数组改变对字符串没有任何影响,该字符串已经独立。入参的value是一个 char类型的数组,此方法可以生成一个代表该数组的String对象,相当于复制了这个入参的数组,之后对于入参数组的修改不会影响新建的String对象。

String源码详解第11张

     

     4、字符数组,之后对字符数组操作不影响该字符串。如果offset小于0或者count小于0或者count大于length-offset,则抛出异常,获取字符数组的第offset开始的count个字符,然后转换成字符串。参数1,value---->char类型的数组,参数2,offset---->开始的位置(0.1.2....),参数3,count---->长度(生成String对象的长度)。

 String源码详解第12张

     5、字符数组value。

     1、字符数组value。

 

     1、字符数组value。

 

     1、字符数组value。

 

     1、字符数组value。

 

     1、字符数组value。

 

     1、字符数组value。

 

     1、字符数组value。

 

     1、字符数组value。

免责声明:文章转载自《String源码详解》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇(转)Linux修改eth2到eth0(70-persistent-net.rules)docker pull 覆盖本地镜像问题下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C# Winform 涉及的拖放操作总结

在开发程序的时候,为了提高用户的使用体验,或满足相关用户的功能,总是离不开拖放功能。而本文是总结winform下的常用拖放操作。主要有 1.textbox接受拖放的文件2.listbox允许用户自定义排序3.listbox之间的拖放4.控件的拖放5.console的拖放问题 用户在进行拖放操作时,经过的步骤大体如下:例如将A中的数据拖放的B中鼠标点击A中的...

webMagic入门案例,启动流程,及从页面中获取元素,并放到Page对象中,并成功拿出

本例作用: 1)首次成功配置,了解软件运行机制2)从页面中获取元素三种方式 jsoup,xpath,css3) page.putField("subject","尝试存入结果项的内容,可从页面中获取值");4)page.getResultItems().get("subject") 从结果集中拿出数据5)List<String> links =...

[Java] SpringMVC工作原理之一:DispatcherServlet

一、DispatcherServlet 处理流程 在整个 Spring MVC 框架中,DispatcherServlet 处于核心位置,它负责协调和组织不同组件完成请求处理并返回响应工作。在看 DispatcherServlet 类之前,我们先来看一下请求处理的大致流程: Tomcat 启动,对 DispatcherServlet 进行实例化,然后调用...

Springboot+ActiveMQ(ActiveMQ消息持久化,保证JMS的可靠性,消费者幂等性)

ActiveMQ 持久化设置: 在redis中提供了两种持久化机制:RDB和AOF 两种持久化方式,避免redis宕机以后,能数据恢复,所以持久化的功能 对高可用程序来说 很重要。 同样在ActiveMQ 中 也提供了持久化的功能,在生产者 生产消息 到队列中,可以通过设置 该消息在队列中是否持久化。持久化以后,即使ActiveMQ重启了,队列中的消息也不...

Java各种反射性能对比

对各种方法实现get方法的性能进行了一个测试。 总共有5个测试,,每个测试都是执行1亿次 1. 直接通过Java的get方法 2.通过高性能的ReflectAsm库进行测试 3.通过Java Class类自带的反射获得Method测试 4.使用Java自带的Property类获取Method测试 5.BeanUtils的getProperty测试 1 测试...

如何在Markdown文档中插入空格?

简单说  在 Markdown 文档中,可以直接采用 HTML 标记插入空格(blank space),而且无需任何其他前缀或分隔符。具体如下所示: 插入一个空格 (non-breaking space)     &nbsp;    或    &#160;     或      &#xA0; 插入两个空格 (en space)   ...