RELATEED CONSULTING
相关咨询
选择下列产品马上在线沟通
服务时间:9:30-18:00
你可能遇到了下面的问题
关闭右侧工具栏
Thinking:int,Integer数组的初始化
  • 作者:xiaoxiao
  • 发表时间:2020-12-23 10:39
  • 来源:未知

EXAMPLE ArrayOne :

import java.util.*;public class ArrayOne{static Random rand = new Random();static int pRand(int mod) {return Math.abs(rand.nextInt()) % mod + 1;}public static void main(String[] args) {int[] a;a = new int[pRand(20)];prt("length of a = " + a.length);for(int i = 0; i < a.length; i++)prt("a[" + i + "] = " + a[i]);}static void prt(String s) {System.out.println(s);}}

My Tip:从程序输出可看到基本数据类型的数组元素会自动初始化成“空”值(对于数值,空值就是零;对于char,它是null ;而对于boolean,它却是false)

==============

EXAMPLE ArrayTwo:

public class ArrayClassObj {         public static void main(String[] args) {    Integer[] a = new Integer[20];   prt("length of a = " + a.length);   for(int i = 0; i < a.length; i++) {    a[i] = new Integer(i);/**将该句注释后,执行没有错误!!!*/    prt("a[" + i + "] = " + a[i]);               } } static void prt(String s) {  System.out.println(s);}}

My Tip:

ThinkingInJava 2 叙述如下:

若操作的是一个非基本类型对象的数组,那么无论如何都要使用new。在这里,我们会再一次遇到句柄问题,因为我们创建的是一个句柄数组。请大家观察封装器类型Integer,它是一个类,而非基本数据类型

Integer[] a = new Integer[20]中,甚至在new 调用后才开始创建数组,它只是一个句柄数组,而且除非通过创建一个新的Integer 对象,从而初始化了对象句柄,否则初始化进程不会结束,所以a[i] = new Integer(i),但若忘记创建对象,就会在运行期试图读取空数组位置时获得一个“违例”错误。

===

注意,在这里,当我注释掉a[i] = new Integer(i);这句时,仍然可以运行,运行结果是,a[0]~a[19]均为null

理解(1):

Integer[] a = new Integer[20];就已经对数组进行初始化了,数组里的每个元素的值都为null,a是一个数组对象,已经生成实例了:a = new Integer[20];其元素是Integer对象的引用,按照java规范,其初值为 null,即不指向任何对象而在int[] a=new int[3];中数组里的每个元素都是0;

理解(2):