运算符:数组
编辑运算符:数组
编辑数组初始化
编辑使用 数组初始化运算符 '[] {}'
在堆上分配一个单维的 数组类型 实例,其中包含一组预定义元素。用于初始化数组类型实例中每个元素的值会在插入时被强制转换为指定的元素类型值。指定值的顺序会被保留。
错误
- 如果某个值无法强制转换为指定的类型值。
语法
array_initialization: 'new' TYPE '[' ']' '{' expression_list '}' | 'new' TYPE '[' ']' '{' '}'; expression_list: expression (',' expression);
示例
-
使用静态值初始化数组。
-
使用非静态值初始化数组。
int i = 1; long l = 2L; float f = 3.0F; double d = 4.0; String s = "5"; def array = new def[] {i, l, f*d, s};
声明
int i
;将int 1
存储到i
声明
long l
;将long 2
存储到l
声明
float f
;将float 3.0
存储到f
声明
double d
;将double 4.0
存储到d
声明
String s
;将String "5"
存储到s
声明
def array
;分配1 维 def 数组
实例,长度为 [4]
→1 维 def 数组引用
;从i
加载 →int 1
;隐式转换int 1
到def
→def
;将def
存储到1 维 def 数组引用
的索引 [0]
;从l
加载 →long 2
;隐式转换long 2
到def
→def
;将def
存储到1 维 def 数组引用
的索引 [1]
;从f
加载 →float 3.0
;从d
加载 →double 4.0
;提升float 3.0
和double 4.0
:结果为double
;隐式转换float 3.0
到double 3.0
→double 3.0
;将double 3.0
和double 4.0
相乘 →double 12.0
;隐式转换double 12.0
到def
→def
;将def
存储到1 维 def 数组引用
的索引 [2]
;从s
加载 →String "5"
;隐式转换String "5"
到def
→def
;将def
存储到1 维 def 数组引用
的索引 [3]
;隐式转换1 维 int 数组引用
到def
→def
;将def
存储到array
数组访问
编辑使用 数组访问运算符 '[]'
将值存储到 数组类型 值或从中加载值。数组类型值的每个元素都使用 int
类型值来访问,以指定要存储/加载的索引。数组中可访问元素的范围是 [0, size)
,其中 size 是分配时指定的元素数量。使用负的 int
类型值作为索引,从数组类型值的末尾反向访问元素,范围为 [-size, -1]
。
错误
- 如果提供的值不是
int
类型值,或者无法强制转换为int
类型值。 - 如果访问的元素超出有效范围。
语法
brace_access: '[' expression ']'
示例
-
使用单维数组进行数组访问。
声明
int[] x
;分配1 维 int 数组
实例,长度为 [2]
→1 维 int 数组引用
;将1 维 int 数组引用
存储到x
从
x
加载 →1 维 int 数组引用
;将int 2
存储到1 维 int 数组引用
的索引 [0]
;从
x
加载 →1 维 int 数组引用
;将int 5
存储到1 维 int 数组引用
的索引 [1]
;声明
int y
;从x
加载 →1 维 int 数组引用
;从1 维 int 数组引用
的索引 [0]
加载 →int 2
;从x
加载 →1 维 int 数组引用
;从1 维 int 数组引用
的索引 [1]
加载 →int 5
;将int 2
和int 5
相加 →int 7
;将int 7
存储到y
声明
int z
;将int 1
存储到z
;声明
int i
;从x
加载 →1 维 int 数组引用
;从z
加载 →int 1
;从1 维 int 数组引用
的索引 [1]
加载 →int 5
;将int 5
存储到i
; -
使用
def
类型进行数组访问。声明
def d
;分配1 维 int 数组
实例,长度为 [2]
→1 维 int 数组引用
;隐式转换1 维 int 数组引用
到def
→def
;将def
存储到d
从
d
加载 →def
隐式转换def
到1 维 int 数组引用
→1 维 int 数组引用
;将int 2
存储到1 维 int 数组引用
的索引 [0]
;从
d
加载 →def
隐式转换def
到1 维 int 数组引用
→1 维 int 数组引用
;将int 5
存储到1 维 int 数组引用
的索引 [1]
;声明
int x
;从d
加载 →def
隐式转换def
到1 维 int 数组引用
→1 维 int 数组引用
;从1 维 int 数组引用
的索引 [0]
加载 →int 2
;从d
加载 →def
隐式转换def
到1 维 int 数组引用
→1 维 int 数组引用
;从1 维 int 数组引用
的索引 [1]
加载 →int 5
;将int 2
和int 5
相加 →int 7
;隐式转换int 7
到def
→def
;将def
存储到x
声明
def y
;隐式转换int 1
到def
→def
;将def
存储到y
;声明
int i
;从d
加载 →def
隐式转换def
到1 维 int 数组引用
→1 维 int 数组引用
;从y
加载 →def
;隐式转换def
到int 1
→int 1
;从1 维 int 数组引用
的索引 [1]
加载 →int 5
;隐式转换int 5
到def
;将def
存储到z
; -
使用多维数组进行数组访问。
数组长度
编辑数组类型值包含一个名为 length
的只读成员字段。length
字段以 int
类型值存储数组的大小,其中 size 是分配时指定的元素数量。使用 字段访问运算符 从数组类型值加载字段 length
。
示例
新数组
编辑使用 新数组运算符 'new []'
在堆上分配一个数组类型实例。在 new
标记后指定元素类型。使用元素类型名称后的 [
和 ]
标记指定每个维度。每个维度的大小由每组 [
和 ]
标记之间的 int
类型值指定。
错误
- 如果为维度的大小指定的值不是
int
类型值,或者无法强制转换为int
类型值。
语法
new_array: 'new' TYPE ('[' expression ']')+;
示例
-
不同数组类型的分配。