本章源码分析基于JDK1.7

实现的接口

String类被final修饰词修饰,代表不可修改的特性,它实现了三个接口,Serializable是序列化接口,Compareble是排序接口,Char是字符序列接口。

主要成员变量

char[]:String通过char[]来实现String的各种功能,字符串由字符数组实现。

hash:用于缓存hash值,因为String类是final不可修改的,所以hash值也是固定的,为了避免重复计算hash值而缓存。

CASE_INSENSITIVE_ORDER:排序器,由上可知String类实现了Compareble接口,这里的Comparator用于忽视大小写的字符串的比较。

构造函数

String共有15个重载构造函数,入参这几种:空、char[]、String、StringBuffer、StringBuilder、byte[],通过这些来构造字符串对象。

length方法

通过获取char[]的长度来获取字符串的长度

isEmpty方法

通过判断char[]的长度是否为0来判断是否为空

charAt方法

通过char[]数组下标获取到对应位置的char字符

equals方法

首先比较内存地址,再判断是否是String类型,然后再判断长度,最后逐个比较其中的char。

hashCode方法

这里的hash值计算有个特点,就是String内部缓存了hash值,如果hash值不为0则直接返回,不需要再次进行计算,因为String是被final修饰的,它不会被修改,所以没有必要每次都重新计算hash值。

compareTo方法

通过两个字符串的第一个不一样的字符来比较大小并返回结果,若两个字符串的字符都一样则比较两个字符串的长度。

原作者:呆某人

原出处:CSDN

原文链接:String源码解析_w8827130的博客-CSDN博客

string 长度_String源码解析相关推荐

  1. 面试官系统精讲Java源码及大厂真题 - 02 String、Long 源码解析和面试题

    02 String.Long 源码解析和面试题 劳动是一切知识的源泉. --陶铸 引导语 String 和 Long 大家都很熟悉,本小节主要结合实际的工作场景,来一起看下 String 和 Long ...

  2. 【JDK源码分析】StringBuilder、StringBuilder、String、AbstractStringBuilder源码解析

    前言 String为不可变,StringBuilder.StringBuffer都为可变. 下面是它们之前的关系 为什么String是不可变的? // final修饰,禁止继承String publi ...

  3. Java String源码解析

    String类概要 所有的字符串字面量都属于String类,String对象创建后不可改变,因此可以缓存共享,StringBuilder,StringBuffer是可变的实现 String类提供了操作 ...

  4. 关于 Android 中 TabLayout 下划线适配文字长度解析(附清晰详细的源码解析)

    温故而知新 坚持原创 请多多支持 一.问题背景 假期在做项目的时候,当时遇到了一个需求就是需要使用 TabLayout + ViewPager 来实现一个上部导航栏的动态效果,并且希望下划线的长度等于 ...

  5. 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 ...

  6. Java的String为什么不可变?(String源码解析)

    String的源码解析 public final class String{private final char value[];//容器,存放字符串的private int hash;//哈希值pr ...

  7. String为什么不可变?(Java源码解析)

    String的源码解析 public final class String{private final char value[];//容器,存放字符串的private int hash;//哈希值pr ...

  8. String str = new String(abc)创建了几个对象?结合源码解析

    String str = new String("abc")创建了几个对象?结合源码解析 首先,我们看一下jdk源码: 1 /** 2 * Initializes a newly ...

  9. Simple Dynamic Strings(SDS)源码解析和使用说明二

    在<Simple Dynamic Strings(SDS)源码解析和使用说明一>文中,我们分析了SDS库中数据的基本结构和创建.释放等方法.本文将介绍其一些其他方法及实现.(转载请指明出于 ...

最新文章

  1. C#如何向EXCEL写入数据
  2. axios队列 vue_(十三 )Vue 封装axios(四种请求)及相关介绍
  3. linux怎样自制库_linux 下动态链接库的制作与使用
  4. 【Gradle】配置详解(持续更正补充)
  5. linux 程序收到sigsegv信号_linux下定位多线程内存越界问题实践总结
  6. 软件测试工程师笔试总结
  7. system函数阻塞_简单的Java阻塞队列
  8. 美国组建半导体工作组或与中国推进海外并购冲突
  9. FireEye:K3chang行动***欧洲外交部门
  10. 用变量a给出下面的定义
  11. wireshark基本用法及过虑规则
  12. rpcbind服务说明及关闭
  13. 围棋人机大战属于计算机在什么方面的应用,新华社评围棋人机大战:不怕电脑记性好 就怕爱学习...
  14. MySQL简单技巧(三):教你轻松用information_schema表+python实现表结构同步(上)——理论篇
  15. 安装操作系统找不到任何驱动器的解决方法
  16. 希腊计数法罗马计数法
  17. ffmpeg 为取经而来_孙悟空很早之前就死了,取经的其实是六耳猕猴,这说法是真的吗?...
  18. C语言贪吃蛇游戏主要功能,C语言游戏-贪吃蛇
  19. 视频监控RTSP 客户端
  20. 大学生吸烟现象调查报告

热门文章

  1. python 华泰证券 客户端_华泰证券网上交易系统(高级版)下载 v8.13官方版下载
  2. vue 嵌套表格组件_使用form-create动态生成vue自定义组件和嵌套表单组件
  3. win8能开发android的sdk么,Win8下Android SDK安装与环境变量配置教程
  4. python画鱼_Python经典五人分鱼实例讲解
  5. C语言一维数组实现杨辉三角,一维数组实现杨辉三角
  6. 分段二次插值例题_分段三次插值
  7. 天宫初级认证答案_百度初级认证试题答案
  8. glide加载gif图不显示动画_用Python绘制会动的柱形竞赛图
  9. collector list 多个分组_【S01E07】groupby方法、GroupBy对象、groupby方法的分组键
  10. html自定义js程序,JS中微信小程序自定义底部弹出框