java中字符串(2)String
上一篇我们讲了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虚拟机一书,或关注
@RednaxelaFX
大神的讲解。
评论区疑问解答:
看如下源码:如果是同一个对象,直接返回true了,就不往下执行了。
转载无限欢迎,但请注明「清浅池塘」和「https://zhuanlan.zhihu.com/p/27626724」。转载请在文中保留此段,感谢您对作者版权的尊重。如需商业转载或刊登,请联系作者获得授权。自助转载请点击:https://www.rightknights.com/materi
java中字符串(2)String相关推荐
- Java中字符串对象String、StringBuffer、StringBuilder的比较
原文地址:http://www.iteye.com/topic/522167 作者:每次上网冲杯Java时,都能看到关于String无休无止的争论.还是觉得有必要让这个讨厌又很可爱的String美眉, ...
- 【转】Java中字符串中子串的查找共有四种方法(indexof())
原文网址:http://wfly2004.blog.163.com/blog/static/1176427201032692927349/ Java中字符串中子串的查找共有四种方法,如下: 1.int ...
- java中字符串的精确匹配_Java最佳实践–字符串性能和精确字符串匹配
java中字符串的精确匹配 在使用Java编程语言时,我们将继续讨论与建议的实践有关的系列文章,我们将讨论String性能调优. 我们将专注于如何有效地处理字符串创建, 字符串更改和字符串匹配操作. ...
- [转载] Java 中字符串转整型和整型转字符串
参考链接: Java中的字符串到整数– parseInt() Java 中字符串转整型和整型转字符串 1.字符串转整型Java代码,字符串为纯数字的情况下,调用Integer的静态方法parseInt ...
- Java中字符串中子串的查找共有四种方法(indexof())
2019独角兽企业重金招聘Python工程师标准>>> public class FirstDemo { /** *API中String的常用方法 */ // 查找指定字符串是否存在 ...
- java equals 字符串_Java String 字符串 比较 == equals
1.==该运算符表示指向字符串的引用是否相同,如t1==t2这种情况, 是因为在java中字符串的值是不可改变的,相同的字符串在内存中只会存一份, 所以t1和t2指向的是同一个对象,而t1==t4返回 ...
- java中字符串 MD5密码的加密与验证
java中字符串 MD5密码的加密与验证 MD5即Message-Digest Algorithm 5(信息-摘要 算法 5),用于确保信息传输完整一致.是计算机广泛使用的杂凑算法之一(又译 摘要 ...
- Java 中字符串转整型和整型转字符串
Java 中字符串转整型和整型转字符串 1.字符串转整型 Java代码,字符串为纯数字的情况下,调用Integer的静态方法parseInt或者valueOf Java代码,如果单个字符或字符串,需要 ...
- unformat方法java_快速入门介绍Java中强大的String.format()
快速入门介绍Java中强大的String.format() 发布于 2020-12-12| 复制链接 摘记: 前言从 Java 5.0 开始,String 类新增了一个强大的字符串格式化方法 form ...
- Java中字符串的比较
"=="比较两个对象时,比较的是两个对象的内存地址 equals() 比较的是对象的内容(区分字母的大小写) 一.用"=="方法: (1)String a=&q ...
最新文章
- 一副耳机的钱,竟让我体验了「元宇宙」办公
- python有哪些作用-python是什么 特点及功能
- 数字图像处理:第二十三章 基于内容的图象与视频检索
- python元类的简单了解
- C++11新特性,利用std::chrono精简传统获取系统时间的方法
- 使用原生js写ajax
- [NewLife.XCode]高级查询(化繁为简、分页提升性能)
- golang搭建微服务遇到的问题(不断更新)
- 七月算法机器学习 10 聚类算法与应用
- 传智播客Java学习之类的继承
- 算法4中数学模型练习题分析
- duilib隐藏(显示)任务栏图标方式
- 当下的力量(解读版)
- Eclipse 前进一步 快捷键 (eclipse实用快捷键)
- 计算机中的位,字节,字,字长的概念
- 波特Baud、码元、比特bit三者关系+ Byte、bps、Bps
- 数据挖掘:基于关联挖掘的商品销售分析
- 哈工大计算机学院冯骁骋,哈工大数学研究院在非交换分析研究领域取得重要进展...
- 外挂,一个因“快感”而崛起的暴利行业
- 【每日一网】Day30:DSSD(Deconvolutional Single Shot Detector)简单理解