一、类
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类源码分析相关推荐

  1. Java 8 中 GZIPInputStream 类源码分析

    这是<水煮 JDK 源码>系列 的第4篇文章,计划撰写100篇关于JDK源码相关的文章 GZIPInputStream 类位于 java.util.zip 包下,继承于 InflaterI ...

  2. Java NIO中Charset类源码

    Java NIO中Charset类源码 public abstract class Charsetimplements Comparable<Charset> {private stati ...

  3. Java String类源码阅读笔记

    文章目录 一.前置 二.String类源码解析 1.String类继承关系 2.成员变量 3.构造方法 4.长度/判空 5.取字符 6.比较 7.包含 8.hashCode 9.查询索引 10.获取子 ...

  4. java的String类源码详解

    java的String类源码详解 类的定义 public final class Stringimplements java.io.Serializable, Comparable<String ...

  5. java.lang.ThreadLocal实现原理和源码分析

    java.lang.ThreadLocal实现原理和源码分析 1.ThreadLocal的原理:为每一个线程维护变量的副本.某个线程修改的只是自己的副本. 2.ThreadLocal是如何做到把变量变 ...

  6. java vector实现的接口_java中List接口的实现类 ArrayList,LinkedList,Vector 的区别 list实现类源码分析...

    java面试中经常被问到list常用的类以及内部实现机制,平时开发也经常用到list集合类,因此做一个源码级别的分析和比较之间的差异. 首先看一下List接口的的继承关系: list接口继承Colle ...

  7. Java String类源码解析

    String直接继承Object 含有一个char[] value,还有一个int hash默认值为0 new String()的构造产生的是一个值为""的字符数组 String( ...

  8. Java集合篇:LinkedList源码分析

    (注:本文内容基于JDK1.6) 一.概述: LinkedList与ArrayList一样实现List接口,只是ArrayList是List接口的大小可变数组的实现,LinkedList是List接口 ...

  9. Java设计模式学习以及底层源码分析

    源码在分支master 工厂模式 把具体创建产品的细节封装起来,你要什么产品,我给你什么产品即可. 简单工厂模式 工厂方法模式 缓存层:抽象类 抽象工厂模式 缓存层是:接口 原型模式 问题: 原型模式 ...

最新文章

  1. c++ eos智能合约开发_干货|EOS智能合约开发(一)EOS环境搭建和启动节点
  2. VC里的集合类、链表类、映射类
  3. 【django】创建模型类
  4. Ajax基本案例详解之$.ajax的实现
  5. LeetCode 面试题 03 数组中重复的数字
  6. 假如BERT系论文变成Commit History
  7. pytorch/tensorflow 查看 cuda 是否可用
  8. 坚决反对“企业文学化”
  9. mysqlinnodb教程_mysql系列教程 - innodb锁
  10. 计算机视觉 | 面试题:26、LBP算法原理
  11. 毛星云Opencv之图像修补综合示例程序
  12. 在线支付功能实现代码
  13. maven pom.lastupdated
  14. 软件工程(数据流图例题详解)
  15. 计算机开机后黑屏一闪一闪怎么办,Win7开机后黑屏左上角光标闪烁的解决方法...
  16. signature=1786f140adeed932d2fada45ef17913d,PENGARUH ADITIF BAHAN BAKAR DIESEL PADA OPERASI STASIONER
  17. R语言学习:方差分析
  18. Flask 源码解析:session
  19. 蓝桥杯部分题型(奇怪的比赛,电话号码,palindrome)
  20. windows下架设SVN服务器并设置开机启动

热门文章

  1. VMware 全虚拟打开
  2. Linux命令(4):cat命令
  3. 第五章:管理数据库存储结构
  4. 下载Hibernate中文参考手册2.1版
  5. 如何在10亿数中找出前1000大的数
  6. import和from...import
  7. 代码规范之华为公司代码规范
  8. 机器学习如何改变大数据管理
  9. struts2 ajax请求发现执行action两次原因
  10. [转]机器视觉开源代码集合