本章源码分析基于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. AI一分钟|阿里云解释故障原因:触发了一个未知代码Bug;清华蝉联ISC18超算竞赛总冠军...
  2. mysql免压缩安装教程_MySql免解压版安装教程
  3. 《C++ Primer Plus(第六版)》(17)(第十章 对象和类 编程题答案)
  4. iOS --- DIY文件名批量修改
  5. 牛客网NC112--进制转换
  6. [总结]DataGrid 固定表头实现(纵向和横向滚动条滚动,而Header不动)
  7. 信号怎么用matlab分类,使用迁移学习做信号分类
  8. Python爬虫——Python基础笔记
  9. 查岗神器!如何查看连接过的WiFi记录+详细信息+密码找回
  10. 缓存块着色算法和优化的缓存块着色算法
  11. 德勤:制造业企业数字化转型方案(PPT)
  12. unity3d让模型不受3dCamera FOV的影响
  13. Python入门习题(89)——OpenJudge百练习题:二分法求函数的零点
  14. 服务器IIS架设网站无法增加log文件
  15. 怎么在linux系统中输入日历,在Linux终端中使用日历
  16. C基础学习之C 输入 输出
  17. IOC之bean之间的关系讲解
  18. Doxygen使用指南,Doxygen介绍一
  19. GetLastError 返回码含义
  20. 一日一Shader·卡通高光【SS_24】

热门文章

  1. centOS docker容器的安装
  2. java项目短信群发接口_JAVA实现第三方短信发送过程详解
  3. android 4.4 屏幕方向,Android4.4屏幕旋转功能
  4. C/C++ atof函数 - C语言零基础入门教程
  5. python 数据挖掘论文,Orange:一个基于 Python 的数据挖掘和机器学习平台
  6. php-fpm 启动拥有者,php-fpm 的各种启动方式
  7. java 异常练习题_Java 异常(习题)
  8. 的表格点击全选_“逼死”强迫症的杂乱表格,原来3秒就能整理好!(必学)...
  9. java8.0 platform图_Java Platform SE binary语言-Java编程32位/64位版(jdk-jeb)下载V8.0.2510.8官方安装版-西西软件下载...
  10. dvwa安装包linux,dvwa安裝、配置、使用教程(Linux)