string是一个很普通的类-java那些事儿

arctic_fox arctic_fox     2022-12-26     461

关键词:

 

上一篇我们讲了Java中的数组,其实是为本章的内容做准备的,String这个类是我们在写Java代码中用得最多的一个类,没有之一,今天我们就讲讲它,我们打开String这个类的源码:

技术图片

声明了一个char[]数组,变量名value,声明了一个int类型的变量hash(hash的作用我们后续会讲),话不多说,上代码:

技术图片

我们点开构造函数看一下:

技术图片

多年以前,我看到这段代码时我是懵逼的,没错,我现正在准备构造一个String的对象,那original这个对象又是从何而来?是什么时候构造的呢?

在Java中,当值被双引号引起来(如本示例中的"abc"),JVM会去先检查看一看常量池里有没有abc这个对象,如果没有,把abc初始化为对象放入常量池,如果有,直接返回常量池内容。下图是预先处理String str = new String("abc")的参数"abc"

技术图片

接下来处理new关键字,在堆内存中开辟空间,由于hash这个字段是int类型的,成员变量初始化默认值为0。

技术图片

处理构造函数逻辑,hash是值类型,直接赋值,数组为引用类型,直接指向地址。

 

继续上图

技术图片

最后执行String str2 = new String("abc"),结果如下图:

技术图片

利用IDE的debug功能看一下,char数组里已经有了‘a‘,‘b‘,‘c‘这些值。

技术图片

下面我们来看一下String这个类下面这些常用的API是如何实现的:

技术图片技术图片技术图片技术图片技术图片技术图片
 

很简单对吧,可怕的不是源码难读,而是不想,害怕去读源码的心。如果文章得到了你的认可,请为我的文章点赞,你的赞同是我继续下去的动力。

注:文中的图,只是画对象在JVM中大致的样子,以方便大家理解。如果大家想更深层次的研究JVM,推荐大家看深入理解java虚拟机一书。

 

如果喜欢本系列文章,请为我点赞或顺手分享,您的支持是我继续下去的动力,您也可以在评论区留言想了解的内容,有机会本专栏会做讲解,最后别忘了关注一下我。

质量那些事儿

...供者,都不希望模糊处理。好在数字时代,你永远不是第一个关心这个问题的人。以下是几个使用最广泛的(基本按起源时间列出)。 1质量I 查看详情

前端那些事儿

   昨天听到阿里的一个同行提起马云的一句话大致意思是:“今天很残酷,明天更残酷,再坚持一下后天就能见到光明。但是很多人都死在了明天”。听到这句话,顿时值得我去深思,在这里跟博友们分享一下... 查看详情

js那些事儿——gulp的入门使用

前言新人使用gulp的一个记录。首先对于第一个新事物,我会问gulp这是什么?答:gulp是一个自动化构建工具,它可以做一些自动化的任务,比如:检查Javascript编译Sass(或Less之类的)文件合并Javascript压缩并重命名合并后的Javascript... 查看详情

我的那些事儿

今天依旧是个大晴天,这几天已经迷上了看小说,明朝那些事儿,这本书的讲述风格很合胃口。早上到了教研室,又填了表格,不过,目测接下去的时间会有更多的表格。这些表格作为数据记录,不知道有大多用处,不过,在这... 查看详情

css那些事儿2盒子模型

...基础之一,这里的盒子模型与我们平常收到的包裹类似。一个包裹从内到外,分为真实物品部分,物品与外壳之间的填充区,外壳的厚度,当多个包裹放置在一起,包裹与包裹之间的距离等要素组成。那么放到网页布局来说,也... 查看详情

聊一聊登录页设计那些事儿

...页放在一起设计,由此可见产品登录页面设计的重要性。一个出彩的登录界面,将提升产品的品质,赋予产品独特的气质。登录界面也是一个发挥情感化设计,提升用户体验,拉近与用户之间距离的兵家必争之地。 无论网页... 查看详情

机器学习那些事儿

当大多数人听到“机器学习(MachineLearning)”这个词时,他们首先想到的可能是科幻电影里的机器人:可靠的男管家,致命终结者......事实上,机器学习并不是未来幻想曲,有些地方已经是现实了:从一开始的垃圾邮件过滤,OCR(OpticalCharac... 查看详情

程序员分享那些事儿

...家们的事儿。而今天我只想谈谈小企业里面程序员分享的那些事儿。一、为什么要分享   互联网时代,信息大爆炸,每天都是有海量信息涌入,我们不缺信息,而是 查看详情

转:stringstringbufferstringbuilder区别

...eye.com/topic/522167作者:每次上网冲杯Java时,都能看到关于String无休无止的争论。还是觉得有必要让这个讨厌又很可爱的String美眉,赤裸裸的站在我们这些Java色狼面前了。嘿嘿....众所周知,String是由字符组成的串,在程序中使用... 查看详情

转babel那些事儿(代码片段)

...和新事物有时就像鱼和熊掌不可兼得,必须权衡利弊,做一个决断。但是ECMAScript2015不一定要等所有浏览器都支持后才可以用,于是你会 查看详情

关于虚函数的那些事儿

一、虚函数定义在某基类中声明为virtual并在一个或多个派生类中被重新定义的成员函数,用法格式为:virtual函数返回类型函数名(参数表){函数体};虚函数是C++语言实现运行时多态的唯一手段,通过指向派生类的基类指针或引用,... 查看详情

java编程那些事儿——如何学好程序设计?

Java编程那些事儿——如何学好程序设计?俗话说“兴趣是最好的老师”,但是只靠兴趣是远远不够的,还需要付出艰辛的努力。程序设计是一种技能,需要在较短的时间内学会,就不能像学习汉语一样,... 查看详情

关于arraylist的那些事

ArrayList初始化-Java那些事儿ArrayList初始化-Java那些事儿专栏ArrayList底层数组扩容原理-Java那些事儿专栏时间复杂度-Java那些事儿专栏三顾ArrayList-Java那些事儿专栏 查看详情

实现一个名为person的类和它的子类employee,manager是employee的子类,设计一个接口add用于涨工资,普通

...0%。具体要求如下:(1)Person类中的属性有:姓名name(String类型),地址address(String类型);(2)Employee类中的属性有:工号ID(String型),工资wage(double类型),工龄(int型);(3)Manager类中的属性有:级别level(String类... 查看详情

必须知道的string知识点(代码片段)

1.String类型的概述Java中String就是Unicode字符序列,例如,字符串“Javau2122”由5个Unicode字符J、a、v、a和?组成。不像C/C++中,字符串只是字符数组,Java中字符串String是一个java.lang包中的类。但是,在Java中String和普通的类不一样,是... 查看详情

base64的那些事儿

...知识的定义,只要简洁,不错误,表述清楚,不要拘泥于一个字一个词,重要的是真正理解它的原理即可。(其实是因为自己根本不知道标准的定义是什么...)二、Base64的由来?对计算机信息存储稍有了解的人,都清楚,在计算机... 查看详情

java基础之多态的那些事儿

同一个对象在不同时刻体现出来的不同状态,叫多态。多态的前提:       a.有继承或者实现关系。       b.有方法重写。       c.有父类或者父接口引用... 查看详情

开发那些事儿:如何解决rk芯片视频处理编解码耗时很长的问题?

...说,硬解码的解码速度比较快,但同时也存在另一个问题, 查看详情