Loading

数组知识点

1. 数组变量是一种引用类型的变量数组变量并不是数组本身,它只是指向堆内存中的数组对象。

    因此,可以改变一个数组变量所引用的数组,这样可以造成数组长度可变的假象。
 
2. 数组一定要进行初始化。(不要搅混数组变量跟数组对象!-->看第三条)
    不过可以换一个方式来初始化数组,或者说,数组无需初始化。
     就是,先初始化一个A数组,然后再把此数组赋值给另一个B数组变量,那么B数组变量就等于有了数组。也就跳过了数组初始化,例子:
      String[] A=new String[2];//静态初始化了一个长度为2 的字符串数组
      String[] B=null;//定义了一个数组变量B
      B=A;
      System.out.println(B.length);
      结果: 2
      其实本质上还是初始化了数组。只是让B变量直接指向了一个已经执行初始化的数组。
 
3. 数组变量跟数组对象,不要被搞混了。
    数组变量只是一个引用变量(有点类似于C语言里的指针);
    而数组对象就是保存在堆内存中的连续内存空间。
    对数组执行初始化,其实并不是对数组变量执行初始化,而是在堆内存中创建数组对象——也就是为该数组对象分配一块连续的内存空间,这块连续的内存空间的长度就是数组的长度。
    对于数组变量来说,它并不需要进行所谓的初始化,只要让数组变量指向一个有效的数组对象,程序即可正常使用该数组变量。
 
4. 不管是数组还是其它类型的变量,如果是为局部变量的话,必须由程序员自己赋初始值,即使将它赋为null也行。
 
5. java数组的初始化方式有两种:静态初始化、动态初始化
   例子:
  动态初始化:  String[] A=new String[2];//初始化时程序员只指定数组长度,由系统为数组元素分配初始值
  静态初始化:  String[] A=new String[]{"1","2"};//初始化时由程序员显示指定每个数组元素的初始值,由系统决定数组长度。
 
6. 数组变量何时只是数组变量,何时代表数组对象本身?
    当数组变量引用数组对象的属性、方法的时候,就代表数组对象。
    没有引用就是数组变量。
    例子:
               String A=new String[2];
               System.out.println(A);//此时没有引用数组对象的属性方法,所以A是数组变量
               System.out.println(A.length);//此时调用了数组对象的属性,所以A是数组对象
    结果:
               [Ljava.lang.String;@533ded59   //为引用数组对象的地址
               2                          //数组对象的长度
 
7. 基本类型数组的初始化
    对于基本类型数组而言,数组元素的值直接存储在对应的数组元素中,因此基本类型数组的初始化比较简单:
    程序直接为数组分配内存空间,再将数组元素的值存入对应的内存里。
 
8. 引用类型数组的初始化
    引用类型数组的数组元素依然是引用类型的,因此数组元素里存储的还是引用,它指向另一块内存,这块内存里存储了该引用变量所引用的对象(包括数组和java对象)。
 
9. 基本类型变量的值存储在栈内存中,其实这句话是完全错误的。
   应该说:
                所有局部变量都是放在栈内存里保存的,不管其是基本类型的变量还是引用类型的变量,都是存储在各自的方法栈区中;但引用类型变量所引用的对象(包括数组、普通java对象)则总是存储在堆内存中。
posted @ 2015-04-22 13:20  JamKong  阅读(595)  评论(0编辑  收藏  举报