string 长度_String源码解析
![](/assets/blank.gif)
本章源码分析基于JDK1.7
实现的接口
String类被final修饰词修饰,代表不可修改的特性,它实现了三个接口,Serializable是序列化接口,Compareble是排序接口,Char是字符序列接口。
![](/assets/blank.gif)
主要成员变量
char[]:String通过char[]来实现String的各种功能,字符串由字符数组实现。
hash:用于缓存hash值,因为String类是final不可修改的,所以hash值也是固定的,为了避免重复计算hash值而缓存。
CASE_INSENSITIVE_ORDER:排序器,由上可知String类实现了Compareble接口,这里的Comparator用于忽视大小写的字符串的比较。
![](/assets/blank.gif)
构造函数
String共有15个重载构造函数,入参这几种:空、char[]、String、StringBuffer、StringBuilder、byte[],通过这些来构造字符串对象。
![](/assets/blank.gif)
length方法
通过获取char[]的长度来获取字符串的长度
![](/assets/blank.gif)
isEmpty方法
通过判断char[]的长度是否为0来判断是否为空
![](/assets/blank.gif)
charAt方法
通过char[]数组下标获取到对应位置的char字符
![](/assets/blank.gif)
equals方法
首先比较内存地址,再判断是否是String类型,然后再判断长度,最后逐个比较其中的char。
![](/assets/blank.gif)
hashCode方法
这里的hash值计算有个特点,就是String内部缓存了hash值,如果hash值不为0则直接返回,不需要再次进行计算,因为String是被final修饰的,它不会被修改,所以没有必要每次都重新计算hash值。
![](/assets/blank.gif)
compareTo方法
通过两个字符串的第一个不一样的字符来比较大小并返回结果,若两个字符串的字符都一样则比较两个字符串的长度。
![](/assets/blank.gif)
原作者:呆某人
原出处:CSDN
原文链接:String源码解析_w8827130的博客-CSDN博客
string 长度_String源码解析相关推荐
- 面试官系统精讲Java源码及大厂真题 - 02 String、Long 源码解析和面试题
02 String.Long 源码解析和面试题 劳动是一切知识的源泉. --陶铸 引导语 String 和 Long 大家都很熟悉,本小节主要结合实际的工作场景,来一起看下 String 和 Long ...
- 【JDK源码分析】StringBuilder、StringBuilder、String、AbstractStringBuilder源码解析
前言 String为不可变,StringBuilder.StringBuffer都为可变. 下面是它们之前的关系 为什么String是不可变的? // final修饰,禁止继承String publi ...
- Java String源码解析
String类概要 所有的字符串字面量都属于String类,String对象创建后不可改变,因此可以缓存共享,StringBuilder,StringBuffer是可变的实现 String类提供了操作 ...
- 关于 Android 中 TabLayout 下划线适配文字长度解析(附清晰详细的源码解析)
温故而知新 坚持原创 请多多支持 一.问题背景 假期在做项目的时候,当时遇到了一个需求就是需要使用 TabLayout + ViewPager 来实现一个上部导航栏的动态效果,并且希望下划线的长度等于 ...
- Redis源码-String:Redis String命令、Redis String存储原理、Redis String三种编码类型、Redis字符串SDS源码解析、Redis String应用场景
Redis源码-String:Redis String命令.Redis String存储原理.Redis String三种编码类型.Redis字符串SDS源码解析.Redis String应用场景 R ...
- Java的String为什么不可变?(String源码解析)
String的源码解析 public final class String{private final char value[];//容器,存放字符串的private int hash;//哈希值pr ...
- String为什么不可变?(Java源码解析)
String的源码解析 public final class String{private final char value[];//容器,存放字符串的private int hash;//哈希值pr ...
- String str = new String(abc)创建了几个对象?结合源码解析
String str = new String("abc")创建了几个对象?结合源码解析 首先,我们看一下jdk源码: 1 /** 2 * Initializes a newly ...
- Simple Dynamic Strings(SDS)源码解析和使用说明二
在<Simple Dynamic Strings(SDS)源码解析和使用说明一>文中,我们分析了SDS库中数据的基本结构和创建.释放等方法.本文将介绍其一些其他方法及实现.(转载请指明出于 ...
最新文章
- C#如何向EXCEL写入数据
- axios队列 vue_(十三 )Vue 封装axios(四种请求)及相关介绍
- linux怎样自制库_linux 下动态链接库的制作与使用
- 【Gradle】配置详解(持续更正补充)
- linux 程序收到sigsegv信号_linux下定位多线程内存越界问题实践总结
- 软件测试工程师笔试总结
- system函数阻塞_简单的Java阻塞队列
- 美国组建半导体工作组或与中国推进海外并购冲突
- FireEye:K3chang行动***欧洲外交部门
- 用变量a给出下面的定义
- wireshark基本用法及过虑规则
- rpcbind服务说明及关闭
- 围棋人机大战属于计算机在什么方面的应用,新华社评围棋人机大战:不怕电脑记性好 就怕爱学习...
- MySQL简单技巧(三):教你轻松用information_schema表+python实现表结构同步(上)——理论篇
- 安装操作系统找不到任何驱动器的解决方法
- 希腊计数法罗马计数法
- ffmpeg 为取经而来_孙悟空很早之前就死了,取经的其实是六耳猕猴,这说法是真的吗?...
- C语言贪吃蛇游戏主要功能,C语言游戏-贪吃蛇
- 视频监控RTSP 客户端
- 大学生吸烟现象调查报告
热门文章
- python 华泰证券 客户端_华泰证券网上交易系统(高级版)下载 v8.13官方版下载
- vue 嵌套表格组件_使用form-create动态生成vue自定义组件和嵌套表单组件
- win8能开发android的sdk么,Win8下Android SDK安装与环境变量配置教程
- python画鱼_Python经典五人分鱼实例讲解
- C语言一维数组实现杨辉三角,一维数组实现杨辉三角
- 分段二次插值例题_分段三次插值
- 天宫初级认证答案_百度初级认证试题答案
- glide加载gif图不显示动画_用Python绘制会动的柱形竞赛图
- collector list 多个分组_【S01E07】groupby方法、GroupBy对象、groupby方法的分组键
- html自定义js程序,JS中微信小程序自定义底部弹出框