看了think in java前几章,发现有一段说c++的数组容易出现内存问题“若程序访问自己内存块以外的数组,或者在初始化之前使用内存,会产生不可预测的后果”,我试用c++在这方面涉及的数组比较少,所以感觉不出来。
那到底在java里面数组又是如何创建和访问的呢?

解决方案 »

  1.   

    java的数组的声明也是要求给定数的
    比如  int[] a = new int[10];
    但是如果你只用了5个
    他又一个length函数
    可以判断用的大小
    就可以不越界了
      

  2.   

    JAVA中不允许访问超过自身长度的元素。比如:int[] i = new int[5];那么只能访问i[0] - i[4],如果试图访问 i[5],就会抛出ArrayIndexOutOfBoundException异常。
      

  3.   

    数组有 length 函数?数组创建之后有自己的 Class 对象,  JVM 知道用来判断是否越界.
      

  4.   

    wzg_1981(王振国) ,你说的不对吧.length只和定义时候有关,无论你用了几个,length等于定义时候的。
      

  5.   

    应该是翻译的问题
    我觉得应该是 "若程序访问自己内存块以外的地址"如c/c++中
    //若程序访问自己内存块以外的地址 
    char *p = NULL;
    char buf[2];
    p = buf[3];
    *p='1';  //可能没任何错误,也可能AV错误, 但访问的地址不是你申请的//初始化之前使用内存
    char *p;   //p不一定是NULL
    *p = '1';  //p没有初始化,允许就有AV错误而Java有越界判断, 当然,是用效率换安全