对String类的深入理解

String类:
String类相信大家对这个类并不陌生,这就是我们熟悉的字符串类型,但是我们一开始只知道它是用来定义字符串的,并不知道它的底层原理,这里我们就来简单的分析一下String的底层原理,首先我们来看一下String类的体系图:

这里我们可以看出String实现了三个接口其中的Serializable接口说明我们String类型是可以序列化的,那么什么是序列化呢?这里可以简单的了解一下,具体的内容在I/O流中我们会详细的介绍,实现该接口的对象可以将信息以流的方式传输到自己的磁盘内,实现了Comparable接口说明我们的字符串是可以相互比较的。

字符串的初始化方式有两种一种是直接赋值 : String 变量名 = ".....",还有一种是调用构造器进行初始化:String 变量名 = new String("....")待会我们会解释一下这俩个方法的差异,首先我们来了解一下String类的一些基本概念,首先String类它是final的,简单来讲它是无法修改的,但是你在对它重新赋值的时候你会发现,它的值确实被修改了,待会我们会分析它被修改的原因。

首先我们来分析一下String俩个创建方法的区别,我们通过代码来观察一下:

public class String01 {public static void main(String[] args) {String name1 = "孙悟空";String name2 = new String("孙悟空");System.out.println(name1 == name2);}
}

他们定义名字都是“孙悟空”为什么他们不是同一个对象,这里给大家画个示意图:

当我们在创建字符串常量的时候,系统会先在常量池中找一下看看有没有,如果没有就直接创建一个,当我们使用String name1 = “孙悟空”的时候就会在常量池中直接创建,然后直接指向。但是你使用new String()的时候系统会现在堆里面开辟一个空间name2指向该空间,然后通过0xxx22来找常量池中的“孙悟空”,所以name1和name2所指向的对象不同虽然结果一样,但是内在的对象创建方式是截然不同的。

再来解释一下String不能被修改这个问题:

你在执行String name1 = “孙悟空”;这个代码的时候name1会直接指向常量池中的“孙悟空”,当你再执行name1 = “唐三藏”的时候你会发现name1的内容变成了唐三藏,不是说孙悟空这个值被修改成了唐三藏,而是系统在常量池中创建了“唐三藏”这个常量,原本指向“孙悟空”的线被切断了,指向了“唐三藏”,“孙悟空”这个变量还是存储在常量池当中的,所以我们才说String是不可变的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/253341.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Django回顾 - 6 Ajax

【1】Ajax 定义: 异步Javscript和XML 作用: Javascript语言与服务器(django)进行异步交互,传输的数据为XML(当然,传输的数据不只是XML,现在更多使用json数据) 同步交互和异步交互: 1、同步交互&…

IO多路复用(新)

1.前景回顾 无论是阻塞IO还是非阻塞IO,用户应用在一阶段都需要调用recvfrom来获取数据,差别在于无数据时的处理方案: 如果调用recvfrom时,恰好内核没有数据,那么阻塞IO会使用户进程阻塞,非阻塞IO使CPU进行空…

Python通过 psd-tools 解析 PSD 文件

更多资料获取 📚 个人网站:ipengtao.com PSD(Photoshop Document)是Adobe Photoshop软件中使用的图像文件格式,包含图层、通道、蒙版等信息。在Python中,我们可以使用 psd-tools 库来解析和处理PSD文件。本…

180天Java从入门到就业-Day04-01Java程序流程控制介绍、Java分支结构if语句

1.程序流程控制介绍 1.1 流程控制结构介绍 流程控制语句是用来控制程序中各语句执行顺序的语句,可以将语句组合成完成一定功能的逻辑模块。 一个程序会包含三种流程控制结构:顺序结构、分支结构、循环结构 顺序结构在没有使用程序流程控制语句(if-else语句、switch-case语…

人体姿态估计算法

人体姿态估计算法 1 什么是人体姿态估计2 基于经典传统和基于深度学习的方法2.1 基于经典传统的人体姿态估计算法2.2 基于深度学习的人体姿态估计算法OpenPoseAlphaPose (RMPE) 3 算法应用4 Paper 人体姿态估计在现实中的应用场景很丰富,如下 动作捕捉:三…

AI Pika 生成进击的巨人动漫分镜案例

背景介绍 Pika 是一个使用 AI 生成和编辑视频的平台。它致力于通过 AI 技术使视频制作变得简单和无障碍。 Pika 1.0 是 Pika 的一个重大产品升级,包含了一个新的 AI 模型,可以在各种风格下生成和编辑视频,如 3D 动画,动漫,卡通和电影风格。…

一篇文章带你详细了解C++智能指针

一篇文章带你详细了解C智能指针 为什么要有智能指针内存泄漏1.什么是内存泄漏,它的危害是什么2.内存泄漏的分类3.如何避免内存泄漏 智能指针的使用及原理1.RAII2.智能指针的原理3.auto_ptr4.unique_ptr5.shared_ptr6.weak_ptr 为什么要有智能指针 C引入智能指针的主…

QGraphicsView实现简易地图7『异步加载-多瓦片-无底图』

前文链接:QGraphicsView实现简易地图6『异步加载-单瓦片-无底图』 前一篇文章提到的异步单瓦片加载,是指线程每准备好一个瓦片数据后,立刻抛出信号让主线程加载。而本篇异步多瓦片加载是指线程准备好所有瓦片数据后,一起抛出信号让…

【数据结构】——堆排序

前言:我们已经学习了堆以及实现了堆,那么我们就来给堆进行排序。我们怎么来进行排序呢?这一次我们就来解决这个问题。 如果我们堆排序要求排序,我们是建立大堆还是小堆呢,如果我们建的小堆的话,那我们在排序…

JAVAEE初阶相关内容第十九弹--网络原理之TCP_IP【续集2】

写在前 上一篇博客主要介绍的是关于网络层协议-IP协议的重点介绍。需要掌握关于IP协议的协议头格式,关于IPV4分配不够的解决办法。地址管理与路由选择。 点击跳转上一篇博客 本篇博客将继续学习关于计网中协议的内容。 本篇博客主要介绍关于数据链路层的重点协议-以…

K-Radar:适用于各种天气条件的自动驾驶4D雷达物体检测

文章:K-Radar: 4D Radar Object Detection for Autonomous Driving in Various Weather Conditions 作者:Dong-Hee Paek, Seung-Hyun Kong,Kevin Tirta Wijaya 编辑:点云PCL 代码:https://github.com/ka…

基于单片机自动饮料混合机控制系统设计

**单片机设计介绍,基于单片机自动饮料混合机控制系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机自动饮料混合机控制系统设计是一个涉及多个领域的复杂项目,包括单片机技术、传感器技术…