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 工厂模式 把具体创建产品的细节封装起来,你要什么产品,我给你什么产品即可. 简单工厂模式 工厂方法模式 缓存层:抽象类 抽象工厂模式 缓存层是:接口 原型模式 问题: 原型模式 ...
最新文章
- c++ eos智能合约开发_干货|EOS智能合约开发(一)EOS环境搭建和启动节点
- VC里的集合类、链表类、映射类
- 【django】创建模型类
- Ajax基本案例详解之$.ajax的实现
- LeetCode 面试题 03 数组中重复的数字
- 假如BERT系论文变成Commit History
- pytorch/tensorflow 查看 cuda 是否可用
- 坚决反对“企业文学化”
- mysqlinnodb教程_mysql系列教程 - innodb锁
- 计算机视觉 | 面试题:26、LBP算法原理
- 毛星云Opencv之图像修补综合示例程序
- 在线支付功能实现代码
- maven pom.lastupdated
- 软件工程(数据流图例题详解)
- 计算机开机后黑屏一闪一闪怎么办,Win7开机后黑屏左上角光标闪烁的解决方法...
- signature=1786f140adeed932d2fada45ef17913d,PENGARUH ADITIF BAHAN BAKAR DIESEL PADA OPERASI STASIONER
- R语言学习:方差分析
- Flask 源码解析:session
- 蓝桥杯部分题型(奇怪的比赛,电话号码,palindrome)
- windows下架设SVN服务器并设置开机启动