您当前的位置: 首页 >  Java
  • 4浏览

    0关注

    674博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Java中的数组变量问题

沙漠一只雕得儿得儿 发布时间:2016-10-05 11:00:20 ,浏览量:4

数组是否必须初始化
对于这个问题,关键在于要弄清楚数组变量和数组对象的差别。数组变量是存放在栈内存中的,数组对象是存放在堆内存中的。数组变量只是一个引用变量,他能够指向实际的数组对象。
所谓的数组初始化并非对数组变量初始化,而是对数组对象进行初始化。

public static void main(String[] args) {
    int [] num1 = new int[]{11,22,33,44,55};
    int [] num2 = num1;
    int [] num3 = new int[]{1,2,3,4,5};
    int [] num4 = null;
    int [] num5 = {};
    
    num1 = num3;
    num3[2] = 0;
    num2[2] = num1[2];
    System.out.println(num1[2]);
    System.out.println(num2[2]);
    System.out.println(num4[0]);//java.lang.NullPointerException
    System.out.println(num5[0]);//java.lang.ArrayIndexOutOfBoundsException: 0
}

1.java的数组变量是引用类型的变量

2.大部分时候,我们把数组变量和数组对象搞混了,数组变量只是一个引用变量(类似C里的指针),通常存放在栈内存中(也可放入堆内存中的);而数组对象就是保存在堆内存中的连续内存空间。对数组执行初始化,其实并不是对数组变量执行初始化,而是要对数组对象执行初始化---也就是为该数组对象分派一块连续的内存空间,这块连续内存空间的长度就是数组的长度。
对于数组变量来说,它并不需要进行所谓的初始化,只要让数组变量指向一个有效的数组对象,程序即可正常使用该数组变量了

3. 所有局部变量都是放在栈内存里保存的,不管其是基本类型的变量,还是引用类型的变量,都是存储在格子的方法栈区中;但引用类型变量所引用的对象(包括数组,普通java对象)则总是存储在堆内存中。
数组长度为什么不能是变量因为定义数组时,分配空间是需要一个固定的值,来确定你所申请的空间的大小。
若int n = 9;
int a[n];
但是那个n始终是个变量,若n的值改变,则数组大小也会改变,在对其使用的时候
就会使用到数组以外的内容,对程序会造成隐患,基本是不会让你编译通过的。
所以,只能固定的申请a[9];
关注
打赏
1657159701
查看更多评论
立即登录/注册

微信扫码登录

0.2103s