String字符串存储:分析字符串是不可变对象的原因


String字符串存储

  • String字符串:存储分析

    • 就是字符串内部维护了一个:字符数组:char[] ;

       

    • 1.1源码分析:构造方法,用于创建对象;

      //1,String的构造方法:String();
      public String() {
         this.value = "".value;
      }
      ?
      //2,String的构造方法:String(String);
      public String(String original) {
         this.value = original.value;
         this.hash = original.hash;
      }
      ?
      //3,String的构造方法:String(char[]); //重点分析
      public String(char value[]) {
         this.value = Arrays.copyOf(value, value.length);
      }
      ?
      /*
      ?
      笔记:
      1,根据构造方法3,可以看出,String内部维护了一个char[]数组,调用Arrays类的copyOf方法;
      2,分析Arrays类;
      3,分析copyOf()方法:该方法被static修饰,不能被子类重写;存放在内存的方法区,只有一份!
      ?
      */
      ?
    • 1.2:字符数组存储:

      • 字符数组:Arrays.copyOf();

      • 该方法被static修饰,不能被子类重写;static修饰的方法,存放在方法区;

        ?
        /**
        * 总结:分析Arrays类:
        *
        */
        public class ArraysDemo01 {
           public static void main(String[] args) {
        ?
               //1.1 定义一个字符数组
               char[] charArr=new char[5];
        ?
               //1.2 给数组赋值
               charArr[0]='h';
               charArr[1]='e';
               charArr[2]='l';
               charArr[3]='l';
               charArr[4]='o';
        ?
               //1.3 遍历数组
               for (char x: charArr) {
                   System.out.print(x);//hello
              }
        ?
               System.out.println("-----------------");
        ?
               /**
                * 用Arrays类的copyOf(char[],int i)方法:
                * 1,参数类型:char[]数组,int类型;
                * 2,返回值类型:char[];
                * 3,该方法被static修饰;
                */
               //1.4
               char[] charArr1=Arrays.copyOf(charArr,5);
        ?
               for (char c:charArr1) {
                   System.out.print(c);//hello
              }
        ?
        ?
          }
        }