普通的java类型是指,String是一个很普通的类 - Java那些事儿
上一篇我们讲了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那些事儿相关推荐
- String是一个很普通的类 - Java那些事儿
上一篇我们讲了Java中的数组,其实是为本章的内容做准备的,String这个类是我们在写Java代码中用得最多的一个类,没有之一,今天我们就讲讲它,我们打开String这个类的源码: 声明了一个cha ...
- 一个很艰难的 Java 核心面试问题!
一个很艰难的 Java 核心面试问题,这个 Java 问题也常被问: 什么是线程安全的单例,你怎么创建它. 好吧,在Java 5之前的版本, 使用双重检查锁定创建单例 Singleton 时,如果多个 ...
- Java:转换列表 String 到一个字符串
JavaScript具有Array.join() js>["Bill","Bob","Steve"].join(" and ...
- cmd写java程序_用cmd写一个最简单的Java程序
一,准备: 1.确保电脑中装有eclipse软件并且确保配置好环境变量 (1)环境变量配置方法: 特别提示:jdk和eclipse保存的路径不能有中文字符 1.打开我的电脑--属性--高级--环境变量 ...
- 《JAVA练习题目7》 定义一个素数生成器类PrimeGenerator,用于生成给定区间内的所有素数。(类PrimeGenerator都由类Main代替)
题目内容: 定义一个素数生成器类PrimeGenerator,用于生成给定区间内的所有素数.要求PrimeGenerator类具有: 属性:start(区间起始值),end(区间终止值),两个属性均为 ...
- java EE 项目:Attendance 从一个简单项目看java web 开发的整体布局
需求说明: 效果图: 1:数据库: 2:导入信息页面: 3:导入成功后的数据库: 4:显示考情信息(3条): 项目整体格局: 注意:不用管最后一个servlet的包,这个是为了测试,将attenceA ...
- Java把List转换为String使用stream(functional programming in java)
文章目录 遇到问题 解决方法 参考 遇到问题 项目有需求:java把List转换为String,用于后续匹配. 解决方法 String guess = word.stream().map(charac ...
- java孙膑与庞涓_一个很难的数学问题(智力140以下勿进)
旧版Java程序设计Page97 3.12题
庞涓...
一个很难的数学问题(智力140以下勿进) 旧版Java程序设计Page97 3.12题 庞涓 2016-08-23 0 0 0 暂无评分 其他 1 积分下载 如何获取积分? 一个很难的数学问题(智力1 ...
- 写一个楼房盘类java语言编写_Java开发每日复盘2018_0514
今天主要跟大家分享3个部分: 一.「Java的核心机制」 二.「Java命名规范」 三.「Java数据类型相关」 下面我们来一个一个的说: 「Java核心机制」 Java是一种强制面向对象的解释型语言 ...
最新文章
- 分类模型的ROC曲线、AUC值、GINI系数、Lift、Gain、KS指标分别是什么?计算公式是什么?有什么意义?
- 微信公众账号开发文档
- SAP Fiori 3的暗黑主题,酷炫无比
- Java 9 中的 GC 调优基础
- 利用Python来玩扫雷,极致的思维体验
- 宿主机mac os无法连接到虚拟机centos
- 使用Python对Syslog信息进行分析并绘图
- Android ViewFlipper源码分析
- 毕业论文的编辑与排版大学计算机,大学毕业论文排版技巧
- net: 熟悉传统的交换机芯片
- 站在搜索引擎的视角看ASO,aso商店搜索引擎优化
- matlab gui界面的优点,关于Matlab GUI界面设计的一些了解
- 谷歌Chrome浏览器离线安装包
- 产品经验谈:什么是用户画像?用户画像的一些应用案例
- 如何简单进行CAD图层绘图?
- 浅谈搜索引擎优化方法
- 全新天狼星网络验证系统源码+功能强大
- mysql 1197_mysql主从不同步报错Last_Errno 1197
- QT使用QAxWidget读取Excel数据
- 深圳绿色建筑数量和规模居全国榜首 建筑人才需求增加
热门文章
- mysql 视图 mybatis_Mybatis调用视图和存储过程的方法
- 货车定位服务器维护是什么意思,有关货车日常维护的主要内容
- 计算机一级某学校师资情况表,2011年计算机一级考试MS OFFICE上机考试指导
- mysql数据库集群备份策略_mysql高可用方案之集群(cluster)
- Mac AndroidStudio常用快捷键
- 单片机集成wifi等_从零制作单片机需要哪些知识?
- html ajax 菊花,Ajax加载菊花loding效果
- (DFS or BFS)Find The Multiple(poj1426)
- 流放之路材质过滤怎么设置_松下除湿机怎么样 松下除湿机款式有哪些型号【详解】...
- cp命令显示进度条_干货|| Linux常用命令大全