Java源码——String
最近在研究java的源代码,但是由于自己英语水平有限,所以想使用中文注释的方式把源码里的方法全部重写
一遍,下面是楼主整理出来的一小部分。我把整体的项目托管到GitHub上了,欢迎大家前去交流学习。
GitHub : https://github.com/15128928804/yuanMa
/**
* @Author:zhuangfei
* @Description:初始化一个新的 String 对象用来表示一个空的字符序列。
* 注意,这个构造方法是没有使用的必要的,因为字符串是不可变的
* @Date:16:48 2017/11/8
*/
public String() {
this.value = "".value;
} /**
* @Author:zhuangfei
* @Description:初始化一个新的 String对象用来表示相同的字符序列作为参数,
* 换句话说,新创建的字符串是参数字符串的副本。除非一个‘需要的’显示拷贝,
* 否则是不必使用此构造函数的,因为字符串是不可变的
* @Date:16:53 2017/11/8
*/
public String(String original) {
this.value = original.value;
this.hash = original.hash;
} /**
* @Author:zhuangfei
* @Description:分配一个新的String用来表示序列字符数组参数中包含的字符。
* 在该字符数组的内容被复制后的修改中,字符数组不影响新创建的字符串
* @Date:16:58 2017/11/8
*/
public String(char value[]) {
this.value = Arrays.copyOf(value, value.length);
} /**
* @Author:zhuangfei
* @Description:分配一个新的String对象用来包含来自子数组的字符
* 字符数组参数。offset参数是子数组的第一个字符和count位置的索引指定的
* 子数组的长度的内容。
* 子数组被复制后对子数组进行修改不影响新创建的字符串
* value:源数据
* offset:初始偏移
* count:偏移长度
* PS:如果offset和count所得到的值不在源数组的下标内,会抛出
* IndexOutOfBoundsException(数组下标越界) 异常
* @Date:17:02 2017/11/8
*/
public String (char value[], int offset, int count) {
if(offset < 0) { // 没有偏移量
throw new StringIndexOutOfBoundsException(offset); // 抛出索引越界异常
}
if(count <= 0) {
if(count < 0) {
throw new StringIndexOutOfBoundsException(count); // 抛出索引越界异常
}
if(offset <= value.length) { // 初始偏移量<=源数据长度时直接返回源数据
this.value = "".value;
return;
}
}
// 源码解释:偏移量或计数可能在 -1 附近
if(offset > value.length - count) { // 初始偏移量>源数据-初始位置的数据后的长度
throw new StringIndexOutOfBoundsException(offset + count); // 抛出索引越界异常
}
this.value = Arrays.copyOfRange(value, offset,offset+count); // 执行方法
}
Java源码——String的更多相关文章
- Java 源码学习线路————_先JDK工具包集合_再core包,也就是String、StringBuffer等_Java IO类库
http://www.iteye.com/topic/1113732 原则网址 Java源码初接触 如果你进行过一年左右的开发,喜欢用eclipse的debug功能.好了,你现在就有阅读源码的技术基础 ...
- Java 源码刨析 - String
[String 是如何实现的?它有哪些重要的方法?] String 内部实际存储结构为 char 数组,源码如下: public final class String implements java. ...
- Java源码赏析(五)再识 String 类
在 Java源码赏析(三)初识 String 类 中,我们已经大概理解了String的接口,接下来我们描述一下String的常用工具方法. /** * 为了精简的String结构,之前提到的方法省 ...
- Java源码赏析(三)初识 String 类
由于String类比较复杂,现在采用多篇幅来讲述 这一期主要从String使用的关键字,实现的接口,属性以及覆盖的方法入手.省略了大部分的字符串操作,比如split().trim().replace( ...
- 如何阅读Java源码 阅读java的真实体会
刚才在论坛不经意间,看到有关源码阅读的帖子.回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动. 源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心. 说到技术基础,我打个比 ...
- 如何阅读Java源码
刚才在论坛不经意间,看到有关源码阅读的帖子.回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动.源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心. 说到技术基础,我打个比方吧, ...
- Programming a Spider in Java 源码帖
Programming a Spider in Java 源码帖 Listing 1: Finding the bad links (CheckLinks.java) import java.awt. ...
- 使用JDT.AST解析java源码
在做java源码的静态代码审计时,最基础的就是对java文件进行解析,从而获取到此java文件的相关信息: 在java文件中所存在的东西很多,很复杂,难以用相关的正则表达式去一一匹配.但是,eclip ...
- [收藏] Java源码阅读的真实体会
收藏自http://www.iteye.com/topic/1113732 刚才在论坛不经意间,看到有关源码阅读的帖子.回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动. 源码阅读,我 ...
随机推荐
- Qt 编写应用支持多语言版本--一个GUI应用示例
简介 上一篇博文已经说过如何编写支持多语言的Qt 命令行应用,这一篇说说Qt GUI 应用多语言支持的坑. 本人喜欢用代码来写布局,而不是用 Qt Designer 来设计布局,手写布局比 Qt De ...
- 洛谷 4933 洛谷10月月赛II T2 大师
[题解] f[i][j]表示最后一个数为h[i],公差为j的等差数列的个数.n方枚举最后一个数和倒数第二个数转移即可.注意公差可能为负数,需要移动为正数再作为下标. #include<cstdi ...
- Uva 12657 移动盒子(双向链表)
题意: 你有一行盒子,从左到右依次编号为1, 2, 3,…, n.可以执行以下4种指令:1 X Y表示把盒子X移动到盒子Y左边(如果X已经在Y的左边则忽略此指令).2 X Y表示把盒子X移动到盒子Y右 ...
- [转] angular2-highcharts用法详解
1. 使用npm安装angular2-highcharts npm install angular2-highcharts --save 2.主模块中引入 app.module.ts import { ...
- c语言基础--数据类型
一.整型数据: 1.表格: 类型名称 可简写 占用字节 数值范围 signed int int -2147483648(-2^31)~2147483647(2^31-1) unsigned int u ...
- noip模拟赛 单词
分析:这道题真心难想.最主要的是怎么样不重复. 为了不重复统计,把所有符合条件的单词分成两类,一类是某些单词的前缀,一类是 不是任何单词的前缀.涉及到前缀后缀,维护两个trie树,处理3个数组a,b, ...
- Codeforces 284E(概率)
题意: 在T秒内,按输入顺序给出n首曲子的播放顺序,玩家需要从第一曲向后听. 第i首曲子有pi和ti两个属性,pi代表在当前这1秒内有pi/100的概率听出这首曲子是什么, ti代表如果一直持续听ti ...
- Spring Boot实现跨域(转)
一.方法: 服务端设置Respone Header头中Access-Control-Allow-Origin 配合前台使用jsonp 继承WebMvcConfigurerAdapter 添加配置类 二 ...
- ajax 请求 get请求成功,post 404 not found
今天在做express的一个ajax请求的时候发现get请求成功,post 就一直是 404 not found, 研究了半天 才发现是express 的请求方法做了限制,之前一直都是用的 app.g ...
- CCNA一些要点
考试范围: TK640-801(Cisco Certified Network Associate 640-801 ICND Course Notes). 信息单位: 1Byt ...