上一篇我们讲了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相关推荐

  1. Java中字符串对象String、StringBuffer、StringBuilder的比较

    原文地址:http://www.iteye.com/topic/522167 作者:每次上网冲杯Java时,都能看到关于String无休无止的争论.还是觉得有必要让这个讨厌又很可爱的String美眉, ...

  2. 【转】Java中字符串中子串的查找共有四种方法(indexof())

    原文网址:http://wfly2004.blog.163.com/blog/static/1176427201032692927349/ Java中字符串中子串的查找共有四种方法,如下: 1.int ...

  3. java中字符串的精确匹配_Java最佳实践–字符串性能和精确字符串匹配

    java中字符串的精确匹配 在使用Java编程语言时,我们将继续讨论与建议的实践有关的系列文章,我们将讨论String性能调优. 我们将专注于如何有效地处理字符串创建, 字符串更改和字符串匹配操作. ...

  4. [转载] Java 中字符串转整型和整型转字符串

    参考链接: Java中的字符串到整数– parseInt() Java 中字符串转整型和整型转字符串 1.字符串转整型Java代码,字符串为纯数字的情况下,调用Integer的静态方法parseInt ...

  5. Java中字符串中子串的查找共有四种方法(indexof())

    2019独角兽企业重金招聘Python工程师标准>>> public class FirstDemo { /** *API中String的常用方法 */ // 查找指定字符串是否存在 ...

  6. java equals 字符串_Java String 字符串 比较 == equals

    1.==该运算符表示指向字符串的引用是否相同,如t1==t2这种情况, 是因为在java中字符串的值是不可改变的,相同的字符串在内存中只会存一份, 所以t1和t2指向的是同一个对象,而t1==t4返回 ...

  7. java中字符串 MD5密码的加密与验证

    java中字符串 MD5密码的加密与验证   MD5即Message-Digest Algorithm 5(信息-摘要 算法 5),用于确保信息传输完整一致.是计算机广泛使用的杂凑算法之一(又译 摘要 ...

  8. Java 中字符串转整型和整型转字符串

    Java 中字符串转整型和整型转字符串 1.字符串转整型 Java代码,字符串为纯数字的情况下,调用Integer的静态方法parseInt或者valueOf Java代码,如果单个字符或字符串,需要 ...

  9. unformat方法java_快速入门介绍Java中强大的String.format()

    快速入门介绍Java中强大的String.format() 发布于 2020-12-12| 复制链接 摘记: 前言从 Java 5.0 开始,String 类新增了一个强大的字符串格式化方法 form ...

  10. Java中字符串的比较

    "=="比较两个对象时,比较的是两个对象的内存地址 equals() 比较的是对象的内容(区分字母的大小写) 一.用"=="方法: (1)String a=&q ...

最新文章

  1. 一副耳机的钱,竟让我体验了「元宇宙」办公
  2. python有哪些作用-python是什么 特点及功能
  3. 数字图像处理:第二十三章 基于内容的图象与视频检索
  4. python元类的简单了解
  5. C++11新特性,利用std::chrono精简传统获取系统时间的方法
  6. 使用原生js写ajax
  7. [NewLife.XCode]高级查询(化繁为简、分页提升性能)
  8. golang搭建微服务遇到的问题(不断更新)
  9. 七月算法机器学习 10 聚类算法与应用
  10. 传智播客Java学习之类的继承
  11. 算法4中数学模型练习题分析
  12. duilib隐藏(显示)任务栏图标方式
  13. 当下的力量(解读版)
  14. Eclipse 前进一步 快捷键 (eclipse实用快捷键)
  15. 计算机中的位,字节,字,字长的概念
  16. 波特Baud、码元、比特bit三者关系+ Byte、bps、Bps
  17. 数据挖掘:基于关联挖掘的商品销售分析
  18. 哈工大计算机学院冯骁骋,哈工大数学研究院在非交换分析研究领域取得重要进展...
  19. 外挂,一个因“快感”而崛起的暴利行业
  20. 【每日一网】Day30:DSSD(Deconvolutional Single Shot Detector)简单理解

热门文章

  1. 【计算机视觉】【车辆识别】--Matlab实现
  2. 人生的意义,呵!我找到了
  3. 刚刚,Redis公布了5.0版本12项新特性
  4. Java语言中的----数组
  5. Ionic--再次打开自动填充用户名和密码的问题解决方法
  6. 在HermesJMS中创建ActiveMQ Session
  7. redis源码阅读--hashTable
  8. 揪出占用磁盘空间的罪魁祸首-企业生产实战
  9. 不root的情况下 查看App的数据表
  10. 为什么宝藏世界不显示服务器,宝藏世界前期萌新常见问题以及解决方法