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中的对象分为:(类的)实例对象和数组对象。
参考资料
Java数组参考_Java数组相关推荐
- java数组解析_Java - 数组解析
一.什么是数组 数组?什么是数组?在我印象中的数组是应该这样的:通过new关键字创建并组装他们,通过使用整形索引值访问它的元素,并且它的尺寸是不可变的! 但是这只是数组的最表面的东西!深一点?就是这样 ...
- java合法的数组声明_Java数组详解
Java数组详解 数组详解 1.数组概述 数组是相同类型数据的有序集合 每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们 2.数组声明和创建 ①数组声明形式 dataType[] a ...
- java 数组 反射_java数组的反射
java数组的反射,有一个JAVA API类可以运用:java.lang.reflect.Array 具体应用: 1:判断一个对象是否是数组: int arr[] = {1,2,3}; Class c ...
- java 数组协变_java 数组协变
标签: 在某些情况下,即使某个对象不是数组的基类型,我们也可以把它赋值给数组元素.这种属性叫做协变(covariance).在下面的情况下可以使用协变: 数组是引用类型数组. 在赋值的对象类型和数组基 ...
- java类型的数组初始化_java数组初始化详解
介绍 学习Java的朋友想必对数组并不陌生,它需要使用之前对其进行初始化,这是因为数组是引用类型,声明数组只是声明一个引用类型的变量,并不是数组对象本身,只要让数组变量指向有效的数组对象,程序中就可使 ...
- java 数组成员_java 数组中含有
<数据结构与抽象:Java语言描述(原书第4版)>一2.2.1 可变大小数组 本节书摘来华章计算机<数据结构与抽象:Java语言描述(原书第4版)>一书中的第2章 ,第2.2. ...
- java定义数组范围_Java数组的定义和使用
为什么需要数组? 问题:我们要计算30个学生的平均分 如果没有数组,我们的代码是这样的 int score1 = 32; int score2 = 56; int score3 = 78; //--此 ...
- java 定义数组属性_Java数组的定义与使用
一.数组概念 可以将多个同一数据类型的数据,存储到同一个容器中 1. 格式 数据类型[] 数组名=new 数据类型[元素个数] "数据类型"表示该数组中可以存放哪一类型的数据 &q ...
- java 二维数组倒置_Java数组反转及二维数组
数组的反转 反转就是把最远端的元素和最近端的元素位置互换(反转前数据:1,2,3,4,5,6反转后:6,5,4,3,2,1) //准备一个需要反转的数组 int[] arr = {1,2,3,4,5, ...
最新文章
- Python回顾与整理12:执行环境
- h2 java tcpip_windows下创建h2集群,及java集成详细步骤
- 查询计划中集的势(Cardinality)的计算
- Electron通过ffi调用DLL
- UIWindowLevel详解
- 使用Flexible实现H5页面的终端适配
- asp.net 2.0 + sqlserver2005 数据依赖缓存
- 编译原理 上下文无关文法
- 英语听力学习-VOA
- nodejs+vue结合七牛云实现图片上传
- 有备而来! 解密DEVELOP德凡为何进入中国市场?
- kbhit linux windows通用,_kbhit() for Linux
- 专家鼓励住房、汽车等大宗商品消费
- 数据仓库工程师基本技能
- TIA博途中OB86组织块的功能和使用方法
- Davinci数据可视化-新增图表类型-旭日图
- Android系统(168)---Android 开源项目分类汇总
- 【统计建模与R软件】第二章 R软件的使用 课本课后习题 答案 解析 代码
- HTML+CSS学习笔记(pink老师前端课程笔记--补档)
- c#12星座速配代码_程序员12星座性格分析,猜猜哪个星座最适合IT行业?