string 长度_String源码解析
本章源码分析基于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源码解析相关推荐
- 面试官系统精讲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库中数据的基本结构和创建.释放等方法.本文将介绍其一些其他方法及实现.(转载请指明出于 ...
最新文章
- AI一分钟|阿里云解释故障原因:触发了一个未知代码Bug;清华蝉联ISC18超算竞赛总冠军...
- mysql免压缩安装教程_MySql免解压版安装教程
- 《C++ Primer Plus(第六版)》(17)(第十章 对象和类 编程题答案)
- iOS --- DIY文件名批量修改
- 牛客网NC112--进制转换
- [总结]DataGrid 固定表头实现(纵向和横向滚动条滚动,而Header不动)
- 信号怎么用matlab分类,使用迁移学习做信号分类
- Python爬虫——Python基础笔记
- 查岗神器!如何查看连接过的WiFi记录+详细信息+密码找回
- 缓存块着色算法和优化的缓存块着色算法
- 德勤:制造业企业数字化转型方案(PPT)
- unity3d让模型不受3dCamera FOV的影响
- Python入门习题(89)——OpenJudge百练习题:二分法求函数的零点
- 服务器IIS架设网站无法增加log文件
- 怎么在linux系统中输入日历,在Linux终端中使用日历
- C基础学习之C 输入 输出
- IOC之bean之间的关系讲解
- Doxygen使用指南,Doxygen介绍一
- GetLastError 返回码含义
- 一日一Shader·卡通高光【SS_24】
热门文章
- centOS docker容器的安装
- java项目短信群发接口_JAVA实现第三方短信发送过程详解
- android 4.4 屏幕方向,Android4.4屏幕旋转功能
- C/C++ atof函数 - C语言零基础入门教程
- python 数据挖掘论文,Orange:一个基于 Python 的数据挖掘和机器学习平台
- php-fpm 启动拥有者,php-fpm 的各种启动方式
- java 异常练习题_Java 异常(习题)
- 的表格点击全选_“逼死”强迫症的杂乱表格,原来3秒就能整理好!(必学)...
- java8.0 platform图_Java Platform SE binary语言-Java编程32位/64位版(jdk-jeb)下载V8.0.2510.8官方安装版-西西软件下载...
- dvwa安装包linux,dvwa安裝、配置、使用教程(Linux)