Java数组参考_Java数组

数组变量 VS 数组对象

先看一例子:

int[] primitiveArray; //在栈中声明了一个引用变量,暂时还没指向任何对象

primitiveArray = new int[5]; //在堆中创建了一个数组对象,并将这个对象的引用复制给primitiveArray。这个数组对象中的每个数组元素的类型都是int类型,并且此时每个数组元素的值都为0。//------------------分割线---------------

int[] primitiveArray2 = {2,3,4,5,6};//在栈中声明了一个名为primitiveArray2 的引用变量,同时在堆中创建了一个数组对象,primitiveArray2指向该对象。该数组对象的各个数组元素的值分别为2,3,4,5,6

数组变量(数组名、数组标识符):分配在栈空间,引用类型,比如上例中的primitiveArray和primitiveArray2,指向在堆中创建的一个真实对象(数组对象)。

数组对象:分配在堆空间,是一个对象,由一系列固定数量的数组元素(element)组成,数组元素的个数在创建数组对象时确定。每个数组元素可以存放基本数据类型的值,或者是指向其他类型的引用,这取决于数组类型。

对象数组 VS 基本类型数组

上述例子中创建的是基本基本类型的数组,也可以创建对象数组,比如:

Student[] objectArray; //在栈中声明了一个引用变量,暂时还没指向任何对象

objectArray= new Student[5]; //在堆中创建了一个数组对象,并将这个对象的引用赋值给objectArray。这个数组对象中的每个数组元素的类型都是Student类型(引用类型),并且此时每个数组元素的值都为null。//------------------分割线---------------

Student[] objectArray2= {new Student("zhangsan"),new Student("lisi"),new Student("wangwu")};//在栈中声明了一个名为objectArray2的引用变量,同时在堆中创建了一个数组对象,objectArray2指向该对象。另外还在堆中创建了三个Student对象,该数组对象中的三个数组元素分别指向了这三个Student对象。

1.在使用上几乎是相同的;

2.唯一的区别就是对象数组保存的是引用,基本类型数组直接保存基本类型的值。

数组类型是一种引用类型

比如int是一个基本类型,但是int[]就是一种引用类型了。为什么这么说呢?

因为int a = 32;

变量a在栈空间,其存储的值为32;

而int[] b = {32};

变量b在栈空间,其存储的值是堆空间中的某个地址值了。既然b中存储的是地址,那么b就是引用类型的变量了。

什么是Java中的对象呢?

在java中如何创建一个对象呢?一般是new Class,这样就会在堆空间中创建出一个对象了。那么Java数组是一个对象吗?如果是对象,那它是哪个类的实例呢?

事实上,java中数组也是一个对象。因为java数组存在于堆空间,所以它就是一个对象,既然它是一个对象,那么它是哪个类的实例呢?

Student student = newStudent();

System.out.println(student.getClass().getCanonicalName());//输出结果:Student

Student[] objectArray= new Student[5];

System.out.println(objectArray.getClass().getCanonicalName());//输出结果:Student[]

Student[][] objectArray2= new Student[5][];

System.out.println(objectArray2.getClass().getCanonicalName());//输出结果:Student[][]

Student[][][] objectArray3= new Student[5][][];

System.out.println(objectArray3.getClass().getCanonicalName());//输出结果:Student[][][]

所以,数组类型可以看做一个特殊的Class类。

ClassName reference = new ClassName(); //普通类的使用方式,这里这是创建了一个对象,栈空间中的引用指向该对象,对象中的各个域进行了默认的初始化,可能还需要重新设置值。

Type[] refrence = new Type[length]; //使数组的方式,创建了一个数组对象,栈空间中的引用指向该对象,数组对象中的各个数组元素进行了默认的初始化,还需要重新给各个元素复制。

所以有的书中,将java中的对象分为:(类的)实例对象和数组对象。

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值