1. 程式人生 > 其它 >String字串儲存:分析字串是不可變物件的原因

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
              }


          }
        }