java.lang中String类源码分析
一、类
public final class String:final关键字说明String类不能被修改(不能被其他类继承和重写)
public final class Stringimplements java.io.Serializable, Comparable<String>, CharSequence
二、方法
1、subString(int beginIndex, int endIndex):截取子字符串
1) 第一层方法
public String substring(int beginIndex, int endIndex) {// beginIndex校验不能小于0if (beginIndex < 0) {throw new StringIndexOutOfBoundsException(beginIndex);}// endIndex校验不能>数组长度if (endIndex > value.length) {throw new StringIndexOutOfBoundsException(endIndex);}// 获取要截取的子字符串的长度int subLen = endIndex - beginIndex;if (subLen < 0) {throw new StringIndexOutOfBoundsException(subLen);}// 判断return ((beginIndex == 0) && (endIndex == value.length)) ? this: new String(value, beginIndex, subLen);}
2) 调用String的有参构造方法
public String(char value[], int offset, int count) {// beginIndex不能小于0if (offset < 0) {throw new StringIndexOutOfBoundsException(offset);}// count = endIndex-beginIndex <=0的情况if (count <= 0) {// count小于0,抛出异常if (count < 0) {throw new StringIndexOutOfBoundsException(count);}// count = 0时,输出空字符串if (offset <= value.length) {this.value = "".value;return;}}// endIndex > value.length长度时抛出异常if (offset > value.length - count) {throw new StringIndexOutOfBoundsException(offset + count);}// 执行数组复制this.value = Arrays.copyOfRange(value, offset, offset+count);}
3) 调用Arrays.copyOfRange方法实现复制数组中元素到另外一个char数组中
public static char[] copyOfRange(char[] original, int from, int to) {int newLength = to - from;if (newLength < 0)throw new IllegalArgumentException(from + " > " + to);// 声明一个char数组,用来装载截取的子字符串char[] copy = new char[newLength];// 核心代码,最终通过它实现将char原始数组中的元素复制到另外一个char数组中System.arraycopy(original, from, copy, 0,Math.min(original.length - from, newLength));return copy;}
未完待续~
java.lang中String类源码分析相关推荐
- Java 8 中 GZIPInputStream 类源码分析
这是<水煮 JDK 源码>系列 的第4篇文章,计划撰写100篇关于JDK源码相关的文章 GZIPInputStream 类位于 java.util.zip 包下,继承于 InflaterI ...
- Java NIO中Charset类源码
Java NIO中Charset类源码 public abstract class Charsetimplements Comparable<Charset> {private stati ...
- Java String类源码阅读笔记
文章目录 一.前置 二.String类源码解析 1.String类继承关系 2.成员变量 3.构造方法 4.长度/判空 5.取字符 6.比较 7.包含 8.hashCode 9.查询索引 10.获取子 ...
- java的String类源码详解
java的String类源码详解 类的定义 public final class Stringimplements java.io.Serializable, Comparable<String ...
- java.lang.ThreadLocal实现原理和源码分析
java.lang.ThreadLocal实现原理和源码分析 1.ThreadLocal的原理:为每一个线程维护变量的副本.某个线程修改的只是自己的副本. 2.ThreadLocal是如何做到把变量变 ...
- java vector实现的接口_java中List接口的实现类 ArrayList,LinkedList,Vector 的区别 list实现类源码分析...
java面试中经常被问到list常用的类以及内部实现机制,平时开发也经常用到list集合类,因此做一个源码级别的分析和比较之间的差异. 首先看一下List接口的的继承关系: list接口继承Colle ...
- Java String类源码解析
String直接继承Object 含有一个char[] value,还有一个int hash默认值为0 new String()的构造产生的是一个值为""的字符数组 String( ...
- Java集合篇:LinkedList源码分析
(注:本文内容基于JDK1.6) 一.概述: LinkedList与ArrayList一样实现List接口,只是ArrayList是List接口的大小可变数组的实现,LinkedList是List接口 ...
- Java设计模式学习以及底层源码分析
源码在分支master 工厂模式 把具体创建产品的细节封装起来,你要什么产品,我给你什么产品即可. 简单工厂模式 工厂方法模式 缓存层:抽象类 抽象工厂模式 缓存层是:接口 原型模式 问题: 原型模式 ...
最新文章
- 解决在vscode使用webpack指令显示“因为在此系统中禁止运行脚本“问题
- Android开发过程中内存泄露检测
- hexo的yelee主题使用本地自己指定的自定义字体
- python 知乎 合并 pdf_一键下载:将知乎专栏导出成电子书
- 现代软件工程第六章作业
- Webpack webpack+gulp实现自动构建部署
- 中国金融出版社出版的2016版《综合》
- Excel数据分析的代码(包括列表的操作)
- frft雷达信号处理 论文
- 如何将epub电子书格式转换成txt文本
- Unity3D数字孪生开发笔记——软件基础篇
- 图像处理:以图像分类和图像深度估计为例,如何将研究想法进行迁移学习应用?
- Android学习笔记之ViewFlipper
- MPB:中科院城环所杨军组-​​基于DNA宏条形码的水体微型真核生物群落测序建库方法...
- oracle 00600 kccpb,ORA-00600: [kccpb_sanity_check_2]报错处理一则
- ZCMU-1411:喜闻乐见的a+b(大整数)
- 自媒体视频剪辑,怎样去掉视频中的字幕和水印
- 解决cannot do positional indexing on Index with these indexers [x] of type str
- 车型选择三级联动插件
- GOM引擎传奇中增加会员时间的脚本教程分享