说明:
继承自Object,实现了java.io.Serializable、Comparable、CharSequence接口

     String类代表字符串,字符串是常量,他们的值创建之后不能更改。字符串缓冲区支持可变的字符串;因为String对象是不可变的,所以可以共享除非另行说明,否则将 null 参数传递给此类中的构造方法或方法将抛出 NullPointerException。

构造函数:

1.String() -创建一个空字符串序列

public String() {    this.value = "".value;  }

2.String(String original)-创建传入参数的字符串的副本

public String(String original) {this.value = original.value;this.hash = original.hash;
}

3.String(char[] value) -传入char数组,生成String对象

public String(char value[]) {this.value = Arrays.copyOf(value, value.length);
}

4.String(char value[], int offset, int count) --传入char数组,从第offset起开始截取,截取长度为count

public String(char value[], int offset, int count) {if (offset < 0) {throw new StringIndexOutOfBoundsException(offset);}//如果初始偏移量即初始索引小于0时,抛出数值越界异常,index为offsetif (count <= 0) {if (count < 0) {throw new StringIndexOutOfBoundsException(count);}if (offset <= value.length) {this.value = "".value;return;}}//若截取长度小于等于0时//若小于零抛出数值越界异常,index为count//若截取长度等于零时,如果offset小于等于数组长度,返回值均为空字符串if (offset > value.length - count) {throw new StringIndexOutOfBoundsException(offset + count);}//若初始偏移量+截取长度大于数组长度,抛出数值越界异常,index为ofset+countthis.value = Arrays.copyOfRange(value, offset, offset+count);//传入char数组,从第offset起开始截取,截取长度为count}

5.String(int[] codePoints, int offset, int count) -传入int类型代码数组,从第offset起开始截取,截取长度为count

public String(int[] codePoints, int offset, int count) {if(offset< 0) {thrownewStringIndexOutOfBoundsException(offset);}//如果初始偏移量小于0,抛出数值越界异常,index=offsetif(count<= 0) {if(count< 0) {thrownewStringIndexOutOfBoundsException(count);}if(offset<=codePoints.length) {this.value="".value;return;} }//若截取长度小于等于0时//若小于零抛出数值越界异常,index为count//若截取长度等于零时,如果offset小于等于数组长度,返回值均为空字符串// Note: offset or count might be near -1>>>1.if (offset > codePoints.length - count) {thrownewStringIndexOutOfBoundsException(offset+count);}//若初始偏移量+截取长度大于数组长度,抛出数值越界异常,index为ofset+countfinal int end=offset+count;//获取截取数组末位的索引值 offset+count// Pass 1: Compute precise size of char[]  计算char数组的大小int n=count;for(int i=offset;i<end;i++){int c=codePoints[i];if(Character.isBmpCodePoint(c))    //判断数组中的int值是否在BMP范围内continue;  //如果是 跳出本轮循环,继续判断数组中下一个值//如果不是,判断数组中指定的代码点是否为从 0x0000 到 0x10FFFF 范围之内的有效 Unicode 代码点值。else if(Character.isValidCodePoint(c))//如果是 增加n的计数,n的值=偏移量count+0x0000 到 0x10FFFF 范围之内的有效 Unicode 代码点值有效个数n++;//如果不是抛出异常:不合法的参数异常IllegalArgumentExceptionelse throw newIllegalArgumentException(Integer.toString(c));}// Pass 2: Allocate and fill in char[] 将代码点放入char[] 数组final char[] v = new char[n];for(int i=offset,j= 0;i<end;i++,j++){int c=codePoints[i];//判断代码点是否在BMP范围内,如果是,强转成char类型if(Character.isBmpCodePoint(c))v[j] = (char)c;elseCharacter.toSurrogates(c,v,j++);/***  static void toSurrogates(int codePoint, char[] dst, int index) {dst[index+1] = lowSurrogate(codePoint);dst[index] = highSurrogate(codePoint);}*/}this.value=v;
}

作者:nzdnllm
链接:https://www.jianshu.com/p/cc21ef7c9340
来源:简书

解读java.lang包下String类的API(一)相关推荐

  1. 为什么java.lang包下的类不需要手动导入

    在使用诸如Date类时,需要手动导入import java. util. Date,再比如使用File类时,也需要手动导入import java. io. File.但是在使用Object类.Stri ...

  2. java JPI中常使用的类介绍即java.lang包下的东西

    java.lang包是java语言的核心,它提供了java中的基础类.包括基本Object类.Class类.String类.基本类型的包装类.基本的数学类等等最基本的类. 下面分别介绍其中比较常用的类 ...

  3. java.lang包—对象基类Object

    原文作者:Boblim 原文地址:Java:Object类详解 目录 一.上帝类 二.Object的类方法 三.常见面试题 Java的一些特性会让初学者感到困惑,但在有经验的开发者眼中,却是合情合理的 ...

  4. java.lang包【Object类】

    基本描述: (1)Object类位于java.lang包中,java.lang包包含着Java最基础和核心的类,在编译时会自动导入: (2)Object类是所有Java类的祖先.每个类都使用 Obje ...

  5. java.lang包有哪些类_Java中Lang包的工具类有哪些

    Java中Lang包的工具类有哪些 发布时间:2020-12-08 16:15:36 来源:亿速云 阅读:76 作者:Leah 今天就跟大家聊聊有关Java中Lang包的工具类有哪些,可能很多人都不太 ...

  6. java lang保_java中lang包下的类都涉及哪几方面的

    展开全部 JDK API文档 ,   你可以下载一个 , 可以非常方便的查看类库软件包 java.lang  :  提供利用 Java 编程语言进行程序设计的基础类.32313133353236313 ...

  7. java.lang包 下

    java.lang:java基础语言包 包装类:基本数据类型-------对象 Integer Charater Integer i =new Integer(12); valueof(String ...

  8. java.lang包—类Class

    原文作者:一人浅醉- 原文地址:Java中的Class类 目录 生成Class对象的三种方式 Class常用方法解释 总结 Class 类是在Java语言中定义一个特定类的实现.一个类的定义包含成员变 ...

  9. 总结:java.lang包

    一.介绍 java.lang包是java语言的核心,它提供了java中的基础类.我们使用java.lang包下的类时,是不需要import类的,默认导入. 包括基本Object类.Class类.Str ...

最新文章

  1. java根据pdf模板生成pdf_Java 复制、压缩PDF文档
  2. 亚马逊ECS和Kubernetes管理百万容器8个洞察
  3. 6.824 Raft lesson4 2020(一)
  4. 计算机组成原理试题 t4,计算机组成原理(四版)本科生试题库整理附答案
  5. [USACO17FEB] Why Did the Cow Cross the Road I P (树状数组求逆序对 易错题)
  6. Backbone入门教程
  7. 数组 -- 13.2 Maximum Subarray --图解
  8. s查看oracle空间分配,Oracle查看表空间使用率(包括临时表空间)
  9. SpringSecurity初步理解
  10. 记前两天的中兴移动笔试以及迅雷笔试
  11. 国外设计素材网址干货
  12. Extended Kalman Filter vs. Error State Kalman Filter for Aircraft Attitude Estimation 翻译
  13. 【JZOJ 省选模拟】死星(deathstar )
  14. c语言maxval函数,fortran语言常用函数
  15. 博弈论中的零和对策和非零和对策
  16. 十二载征程犹未止,看今朝星光尽闪耀丨万字长文回顾2023数据技术嘉年华
  17. python中def fun()是什么意思_python学习函数
  18. EasyExcel实现下载Excel(解决无法从浏览器下载问题)
  19. Beyond Compare 4破解版和破解教程
  20. 小说分享《Mehul和我》结尾篇

热门文章

  1. 前端ThinkJS框架解析
  2. C++自制游戏《Fighter》
  3. 简洁明朗的wordpress企业主题:DX-Etfa
  4. Python之turtle库的学习与使用——画图
  5. BUC冰川算法的python实现
  6. Ubuntu16.04安装K8s步骤和踩坑记录
  7. DTCC呼吁银行和监管机构帮助解决区块链安全问题
  8. jQuery报错:Uncaught ReferenceError: $ is not defined在使用jQuery的时候,发现有如下报错:...
  9. 【图像处理】图像拼接——图像配准、图像融合
  10. 一步步将Windows 10装入移动硬盘中(不用Windows To Go)