上一篇我们讲了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虚拟机一书。

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

普通的java类型是指,String是一个很普通的类 - Java那些事儿相关推荐

  1. String是一个很普通的类 - Java那些事儿

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

  2. 一个很艰难的 Java 核心面试问题!

    一个很艰难的 Java 核心面试问题,这个 Java 问题也常被问: 什么是线程安全的单例,你怎么创建它. 好吧,在Java 5之前的版本, 使用双重检查锁定创建单例 Singleton 时,如果多个 ...

  3. Java:转换列表 String 到一个字符串

    JavaScript具有Array.join() js>["Bill","Bob","Steve"].join(" and ...

  4. cmd写java程序_用cmd写一个最简单的Java程序

    一,准备: 1.确保电脑中装有eclipse软件并且确保配置好环境变量 (1)环境变量配置方法: 特别提示:jdk和eclipse保存的路径不能有中文字符 1.打开我的电脑--属性--高级--环境变量 ...

  5. 《JAVA练习题目7》 定义一个素数生成器类PrimeGenerator,用于生成给定区间内的所有素数。(类PrimeGenerator都由类Main代替)

    题目内容: 定义一个素数生成器类PrimeGenerator,用于生成给定区间内的所有素数.要求PrimeGenerator类具有: 属性:start(区间起始值),end(区间终止值),两个属性均为 ...

  6. java EE 项目:Attendance 从一个简单项目看java web 开发的整体布局

    需求说明: 效果图: 1:数据库: 2:导入信息页面: 3:导入成功后的数据库: 4:显示考情信息(3条): 项目整体格局: 注意:不用管最后一个servlet的包,这个是为了测试,将attenceA ...

  7. Java把List转换为String使用stream(functional programming in java)

    文章目录 遇到问题 解决方法 参考 遇到问题 项目有需求:java把List转换为String,用于后续匹配. 解决方法 String guess = word.stream().map(charac ...

  8. java孙膑与庞涓_一个很难的数学问题(智力140以下勿进) 旧版Java程序设计Page97 3.12题 庞涓...

    一个很难的数学问题(智力140以下勿进) 旧版Java程序设计Page97 3.12题 庞涓 2016-08-23 0 0 0 暂无评分 其他 1 积分下载 如何获取积分? 一个很难的数学问题(智力1 ...

  9. 写一个楼房盘类java语言编写_Java开发每日复盘2018_0514

    今天主要跟大家分享3个部分: 一.「Java的核心机制」 二.「Java命名规范」 三.「Java数据类型相关」 下面我们来一个一个的说: 「Java核心机制」 Java是一种强制面向对象的解释型语言 ...

最新文章

  1. 分类模型的ROC曲线、AUC值、GINI系数、Lift、Gain、KS指标分别是什么?计算公式是什么?有什么意义?
  2. 微信公众账号开发文档
  3. SAP Fiori 3的暗黑主题,酷炫无比
  4. Java 9 中的 GC 调优基础
  5. 利用Python来玩扫雷,极致的思维体验
  6. 宿主机mac os无法连接到虚拟机centos
  7. 使用Python对Syslog信息进行分析并绘图
  8. Android ViewFlipper源码分析
  9. 毕业论文的编辑与排版大学计算机,大学毕业论文排版技巧
  10. net: 熟悉传统的交换机芯片
  11. 站在搜索引擎的视角看ASO,aso商店搜索引擎优化
  12. matlab gui界面的优点,关于Matlab GUI界面设计的一些了解
  13. 谷歌Chrome浏览器离线安装包
  14. 产品经验谈:什么是用户画像?用户画像的一些应用案例
  15. 如何简单进行CAD图层绘图?
  16. 浅谈搜索引擎优化方法
  17. 全新天狼星网络验证系统源码+功能强大
  18. mysql 1197_mysql主从不同步报错Last_Errno 1197
  19. QT使用QAxWidget读取Excel数据
  20. 深圳绿色建筑数量和规模居全国榜首 建筑人才需求增加

热门文章

  1. mysql 视图 mybatis_Mybatis调用视图和存储过程的方法
  2. 货车定位服务器维护是什么意思,有关货车日常维护的主要内容
  3. 计算机一级某学校师资情况表,2011年计算机一级考试MS OFFICE上机考试指导
  4. mysql数据库集群备份策略_mysql高可用方案之集群(cluster)
  5. Mac AndroidStudio常用快捷键
  6. 单片机集成wifi等_从零制作单片机需要哪些知识?
  7. html ajax 菊花,Ajax加载菊花loding效果
  8. (DFS or BFS)Find The Multiple(poj1426)
  9. 流放之路材质过滤怎么设置_松下除湿机怎么样 松下除湿机款式有哪些型号【详解】...
  10. cp命令显示进度条_干货|| Linux常用命令大全