1.2.2 数组类型

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

java数组元素赋值 java给数组赋值_数组

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

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

java数组元素赋值 java给数组赋值_java_02


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

java数组元素赋值 java给数组赋值_java_03


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

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

java数组元素赋值 java给数组赋值_数组_04

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

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

java数组元素赋值 java给数组赋值_java_05

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

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

java数组元素赋值 java给数组赋值_内存空间_06

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

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

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

参考目录

作者: 马俊昌(1.2 赋值)

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