1.2.2 数组类型

基本类型的数组有3种赋值形式,如下所示:

第1种和第2种都是预先知道数组的内容,而第3种是先分配长度, 然后再给每个元素赋值第3种形式中,即使没有给每个元素赋值,每个元素也都有一个默认值,这个默认值跟数组类型有关,数值类型的值 为0,boolean为false,char为空字符

数组长度可以动态确定,如下所示:


       数组长度虽然可以动态确定,但定了之后就不可以变数组有一个 length属性,但只能读,不能改。还有一个小细节,不能在给定初始值 的同时给定长度,即如下格式是不允许的:


       可以这么理解,因为初始值已经决定了长度,再给个长度,如果还 不一致,计算机将无所适从。

数组类型和基本类型是有明显不同的,一个基本类型变量,内存中 只会有一块对应的内存空间。但数组有两块:一块用于存储数组内容本身,另一块用于存储内容的位置。用一个例子来说明,有一个int变量 a,以及一个int数组变量arr,其代码、变量对应的内存地址和内存内容 如表1-3所示。

基本类型a的内存地址是1000,这个位置存储的就是它的值100数组类型arr的内存地址是2000,这个位置存储的值是一个位置3000,3000 开始的位置存储的才是实际的数据“1,2,3”

为什么数组要用两块空间? 不能只用一块空间吗?我们来看下面 这段代码:

这段代码中,arrA初始的长度是3,arrB的长度是4,后来将arrB的 值赋给了arrA。如果arrA对应的内存空间是直接存储的数组内容,那么 它将没有足够的空间去容纳arrB的所有元素。

用两块空间存储就简单得多,arrA存储的值就变成了和arrB的一 样,存储的都是数组内容{4,5,6,7}的地址,此后访问arrA就和arrB 是一样的了,而arrA{1,2,3}的内存空间由于不再被引用会进行垃圾回收,如下所示:

由上也可以看出,给数组变量赋值和给数组中元素赋值是两回事给数组中元素赋值是改变数组内容,而给数组变量赋值则会让变量指向 一个不同的位置

上面我们说数组的长度是不可以变的,不可变指的是数组的内容空间,一经分配,长度就不能再变了,但可以改变数组变量的值,让它指向一个长度不同的空间,就像上例中arrA后来指向了arrB一样。

给变量赋值就是将变量对应的内存空间设置为一个明确的值,有了 值之后,变量可以被加载到CPU,CPU可以对这些值进行各种运算,运 算后的结果又可以被赋值给变量,保存到内存中。数据可以进行哪些运 算?如何进行运算呢?我们下节介绍。

参考目录

绝大多数内容来自于:Java编程的逻辑 作者: 马俊昌(1.2 赋值)

Java官方文档
https://docs.oracle.com/javase/specs/index.html

java 数组的创建 与 赋值相关推荐

  1. Java数组 (一) 创建数组及数组的简单使用

    引言: 我们之前创建两个整型变量可以用 int a = 10;int b = 20; 创建4个整型变量,也可以一行行定义变量, 假设我现在要一次性创建 1w 个整型变量,这种时候我们就需要用到数组这个 ...

  2. JAVA数组的3种赋值方式

    基本数据类型数组的3种赋值方式 第一种赋值方式 int[] arr = {1,2,3}; 第二种赋值方式 int[] arr2 = new int[]{1,2,3}; 第三种赋值方式 int[] ar ...

  3. java数组练习题---创建元素不重复的数组

    题目:创建一个8元素的数组并输出,元素在1-10之间随机生成,且不相同: 题目表面上看似简单,实际却有一个最大的难点-----如何保证元素不重复: 因为元素是随机生成的且逐一赋值的,所以就可以在这一阶 ...

  4. Java 数组、List初始化赋值

    1 数组初始化赋值 //第一种初始化赋值方式 String[] strs1={"1","2"};//第二种初始化赋值方式 String[] strs2=new ...

  5. java创建数组并赋值_「java 数组」Java创建数组的方法 - seo实验室

    java 数组 最近学java,一点小心得,希望和大家分享一下,第一次写文章,写的不好希望大家谅解,当然我也会尽力写好这篇文章! Java创建数组的方法大致有三种 说明:这里以int为数据类型以arr ...

  6. java 数组赋值_自学JAVA每日记录(10)-欢迎指点欢迎共勉

    接上一篇 编程练习:编写一个JAVA程序,创建指定长度的 int 型数组,并生成 100 以内随机数为数组中的每个元素赋值,然后输出数组 要求: 1. 要求通过定义带参带返回值的方法来实现 2. 通过 ...

  7. Java数组及二维数组初始化与赋值方法总结

    一维数组初始化 1.定义数组直接赋值 int a[]= {1,2,3,4,5}; 2.用new在数组中创建元素 int a[]=new int[]{1,2,3}; 注意:后面的[]不要忘了 3.创建指 ...

  8. java 数组总结(赋值,反转,添加,查找)

    数组初始化 import java.util.Scanner;public class ArrayTest1{public static void main(String[] args) {//数组定 ...

  9. Java数组:一维数组的定义和赋值

    当数组中每个元素都只带有一个下标时,这种数组就是"一维数组".一维数组(one-dimensional array)实质上是一组相同类型数据的线性集合,是数组中最简单的一种数组. ...

最新文章

  1. 【美国】谷歌重返机器人背后有何深意?
  2. 3gpp协议_【5G学习笔记】3GPP 5G协议分类清单大全
  3. 第四周课程总结实验报告(二)
  4. 13、Power Query-逆透视列的解析(上)
  5. 腾讯产品课观后感之定位2018-08-22
  6. 查找数组B中不在数组A中的元素
  7. java 子进程id,Java程序如何获得自己的进程ID?
  8. 编程使用资源文件实现多语言页面(In Action)
  9. mysql q4m_Mysql Q4M 队列操作封装(二)
  10. Educational Codeforces Round 51: F. The Shortest Statement(最短路+LCA)
  11. 北京图王软件开发有限公司产品介绍
  12. [翻译]ChipMunk 2D 游戏重力引擎
  13. HDFS- 架构图详细解析
  14. 伪分布式Hbase安装和配置
  15. 吴恩达 深度学习 2021版 笔记
  16. 计算方法实验(二):龙贝格积分法
  17. 天若OCR文字识别本地版
  18. Android 汇率换算对比小工具
  19. [513]linux设置开机自启动
  20. layer.open打不开弹窗的问题

热门文章

  1. 货币数字转换成中文大写的函数
  2. Linux常用查找文件方法
  3. go底层系列-defer原理剖析
  4. bs文件服务器,BS架构(示例代码)
  5. 2018 考研 408 经验贴——政治和英语
  6. python - pyperclip模块
  7. PP-LiteSeg重磅开源!高精度轻量级图像分割SOTA模型
  8. make命令的参数选项(执行make时可以添加哪些选项)
  9. chroot mount
  10. ajax上传图片、下载图片