当前位置: 首页 > 网络应用技术

检查外套并仔细分析:为什么弦不变

时间:2023-03-06 14:33:01 网络应用技术

  说到Java源代码,我相信Little Partners或多或少具有联系,例如ArrayList,Hashmap,Util Bags中的LinkedHashmap以及我们之前已经学到的多行相关类别,例如:...

  这些是我们更普遍的课程,但是对于它们的实施原则,有时我们不能说为什么,甚至有些人在1945年写了代码。,学习的源代码不仅是为了应对面试。更重要的是,我们通过阅读源代码的过程来学习其设计思想。这个想法可以在我们的项目中实践。

  总而言之,阅读源代码有以下好处:

  日常开发中弦乐的频率很高,因此今天我们必须打开弦乐外套,以了解为什么如此受欢迎。

  公共最终班级字符串

  实现Java.io.Serializable,可比charsequence {

  Em

  }从代码中,我们可以看到字符串类是由最终关键字修改的,这也意味着无法继承字符串类,并且在创建后不能修改。

  字符串类同时实现三个接口:

  /**该值已使用。*/

  私人最终字符值[];

  /**缓存字符串的哈希代码*/

  私人int哈希;//默认为0

  /**使用JDK 1.0.2的serialversionuid进行互操作性*/

  私有静态最终长序列化= -684979447075466710L;

  /**

  *类字符串是在序列化流协议中特殊壳体。

  */

  私有静态最终ObjectStreamField [] SerialPersistentFields =

  新的ObjectStreamField [0];将数据保存在字符串中的数据是字符的数组值。值也通过最终修改。出乎意料的是,该数组无法修改。在同一时间上,不提供与价值相关的操作,因此一旦无法修改生成。

  接下来,实现字符串类中的多少个常见方法

  公共布尔等于(对象anobject){

  //内存地址是否相同

  if(this == anobject){

  返回true;

  }

  //目标对象是否为字符串类,如果不是字符串,则直接返回false

  if(anobject instance of String){

  字符串anotherString =(String)AnObject;

  int n = value.length;

  //确定两者的长度是否相等

  if(n == anotherstring.value.length){

  char v1 [] = value;

  char v2 [] =另一个tring.value;

  int i = 0;

  //两者中的每个字符是否相等

  while(n--!= 0){{{

  如果(v1 [i]!= v2 [i])

  返回false;

  i ++;

  }

  返回true;

  }

  }

  返回false;

  } public String substring(int beginIndex,int endIndex){

  if(beginIndex < 0) {

  throw new StringIndexOutOfBoundsException(beginIndex);

  }

  if (endIndex > value.length){

  抛出新的StringIndexOutOfBoundSexception(endIndex);

  }

  int sublen = endIndex -beginIndex;

  如果(Sublen <0){

  抛出新的StringIndexoutofBoundSexception(Sublen);

  }

  返回((beginIndex == 0)&&(endIndex == value.length))?这

  :new String(value,beginIndex,sublen);

  }可以通过源代码看到。对于条件的开始/结束,该方法将调用构图,构造函数最终通过生成新字符串来返回,这意味着此方法不会基于原始字符串屈服。

  同样,我们可以查看该方法的源代码,它们是否会修改原始字符串,但会生成新的字符串对象返回,这也是字符串的不变性能。

最新推荐
猜你喜欢