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中的数组 - Java那些事儿
下一篇:Java基本数据类型和引用类型 - Java那些事儿
转载无限欢迎,但请注明「作者」和「原文地址」。转载请在文中保留此段,感谢您对作者版权的尊重。如需商业转载或刊登,请联系作者获得授权。
String是一个很普通的类 - Java那些事儿相关推荐
- 普通的java类型是指,String是一个很普通的类 - Java那些事儿
上一篇我们讲了Java中的数组,其实是为本章的内容做准备的,String这个类是我们在写Java代码中用得最多的一个类,没有之一,今天我们就讲讲它,我们打开String这个类的源码: 声明了一个cha ...
- 一个很艰难的 Java 核心面试问题!
一个很艰难的 Java 核心面试问题,这个 Java 问题也常被问: 什么是线程安全的单例,你怎么创建它. 好吧,在Java 5之前的版本, 使用双重检查锁定创建单例 Singleton 时,如果多个 ...
- 写一个楼房盘类java语言编写_Java开发每日复盘2018_0514
今天主要跟大家分享3个部分: 一.「Java的核心机制」 二.「Java命名规范」 三.「Java数据类型相关」 下面我们来一个一个的说: 「Java核心机制」 Java是一种强制面向对象的解释型语言 ...
- java treelist 排序_一个很好的Java排序列表
我正在寻找Java的良好排序列表.到处搜寻可以给我一些有关使用TreeSet / TreeMap的提示.但是这些组件缺少一件事:随机访问集合中的元素.例如,我想访问排序集中的第n个元素,但是使用Tre ...
- java三角形判断器_花了两个小时做了那么一个很丑的Java写的三角形判断器.........
闲着无事,花了两三个小时做了那么一个自己都看不下去的Java小程序,可用来判断三角形的类型,输入三边,可以求出各个角的正弦.余弦以及正切值! 说实话,丑得连自己都看不下去了! (不喜勿喷! ) 话不多 ...
- java string改变的影响_为什么Java的string类要设成immutable(不可变的)
最流行的Java面试题之一就是:什么是不可变对象(immutable object),不可变对象有什么好处,在什么情况下应该用,或者更具体一些,Java的String类为什么要设成immutable类 ...
- java如何创造一个整数的类_【技术干货】Java 面试宝典:Java 基础部分(1)
原标题:[技术干货]Java 面试宝典:Java 基础部分(1) Java基础部分: 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io 的 ...
- java notify视频_一个很好的小例子来演示java中的wait()和notify()方法
任何人都可以在 java中为我提供一个很好的小例子演示wait()和notify()功能.我尝试使用下面的代码,但它没有显示我的预期. public class WaitDemo { int i = ...
- jni调用java类_JNI之C++调用Java类 —— java.lang.String
JNI之C++调用Java类 -- java.lang.String 为什么要用C++调用Java类?很难回答,写着文章只是觉得JNI很有意思.于是开始编写一段使用VC++在Windows系统里调用j ...
最新文章
- 选择PHP,选择自由与开源
- 热评一箩筐——《黑客攻防技术宝典》
- 自学MVC——添加一个控制器
- 计算机网络(六)-传输介质
- linux脚本获取usb设备,Linux基于USB端口执行脚本
- mysql 5.7 root password 过期
- JBoss 系列十四:JBoss7/WildFly如何加载外部的文件或properties文件
- 被哥哥巨额索赔56亿?贾跃亭回应:40多亿为联合担保
- 继苹果亚马逊之后 微软加入1万亿美元市值俱乐部
- TensorFlow YOLO3
- android文件搜索广播,Android 实现无网络传输文件
- 怎样为Mac视频添加音频
- AVDictionary结构体相关源码介绍
- 计算机英语形成性考核册,开放英语1形成性考核册答案(中央广播电视大学外语部)doc...
- asp.net 邮件功能
- 如何把语音转换成文字呢?
- python中pip下载的代理设置
- 欧盟非个人数据流动监管新进展
- module java.base does not “opens java.lang“ to unnamed module @1c7696c6
- 站长说说之SEO中浅谈如何做好新闻类网站的优化