|
|
|
Sponsored Link •
|
|
Advertisement
|
Opcodes for arrays
Instantiation of new arrays is accomplished via the newarray,
anewarray, and multianewarray opcodes. The newarray opcode is used to create
arrays of primitive types other than object references. The particular
primitive type is specified by a single one-byte operand following the
newarray opcode. The newarray instruction can create arrays for byte, short,
char, int, long, float, double, or boolean.
The anewarray instruction creates an array of object references. Two one-byte operands follow the anewarray opcode and are combined to form a 16-bit index into the constant pool. A description of the class of object for which the array is to be created is found in the constant pool at the specified index. This instruction allocates space for the array of object references and initializes the references to null.
The multianewarray instruction is used to allocate multidimensional arrays -- which are simply arrays of arrays -- and could be allocated with repeated use of the anewarray and newarray instructions. The multianewarray instruction simply compresses the bytecodes needed to create multidimensional arrays into one instruction. Two one-byte operands follow the multianewarray opcode and are combined to form a 16-bit index into the constant pool. A description of the class of object for which the array is to be created is found in the constant pool at the specified index. Immediately following the two one-byte operands that form the constant pool index is a one-byte operand that specifies the number of dimensions in this multidimensional array. The sizes for each dimension are popped off the stack. This instruction allocates space for all arrays that are needed to implement the multidimensional arrays.
| Opcode | Operand(s) | Description |
|---|---|---|
newarray |
atype | pops length, allocates new array of primitive types of type indicated by atype, pushes objectref of new array |
anewarray |
indexbyte1, indexbyte2 | pops length, allocates a new array of objects of class indicated by indexbyte1 and indexbyte2, pushes objectref of new array |
multianewarray |
indexbyte1, indexbyte2, dimensions | pops dimensions number of array lengths, allocates a new multidimensional array of class indicated by indexbyte1 and indexbyte2, pushes objectref of new array |
The next table shows the instruction that pops an array reference off the top of the stack and pushes the length of that array.
| Opcode | Operand(s) | Description |
|---|---|---|
arraylength |
(none) | pops objectref of an array, pushes length of that array |
The following opcodes retrieve an element from an array. The array index and array reference are popped from the stack, and the value at the specified index of the specified array is pushed back onto the stack.
| Opcode | Operand(s) | Description |
|---|---|---|
baload |
(none) | pops index and arrayref of an array of bytes, pushes arrayref[index] |
caload |
(none) | pops index and arrayref of an array of chars, pushes arrayref[index] |
saload |
(none) | pops index and arrayref of an array of shorts, pushes arrayref[index] |
iaload |
(none) | pops index and arrayref of an array of ints, pushes arrayref[index] |
laload |
(none) | pops index and arrayref of an array of longs, pushes arrayref[index] |
faload |
(none) | pops index and arrayref of an array of floats, pushes arrayref[index] |
daload |
(none) | pops index and arrayref of an array of doubles, pushes arrayref[index] |
aaload |
(none) | pops index and arrayref of an array of objectrefs, pushes arrayref[index] |
The next table shows the opcodes that store a value into an array element. The value, index, and array reference are popped from the top of the stack.
| Opcode | Operand(s) | Description |
|---|---|---|
bastore |
(none) | pops value, index, and arrayref of an array of bytes, assigns arrayref[index] = value |
castore |
(none) | pops value, index, and arrayref of an array of chars, assigns arrayref[index] = value |
sastore |
(none) | pops value, index, and arrayref of an array of shorts, assigns arrayref[index] = value |
iastore |
(none) | pops value, index, and arrayref of an array of ints, assigns arrayref[index] = value |
lastore |
(none) | pops value, index, and arrayref of an array of longs, assigns arrayref[index] = value |
fastore |
(none) | pops value, index, and arrayref of an array of floats, assigns arrayref[index] = value |
dastore |
(none) | pops value, index, and arrayref of an array of doubles, assigns arrayref[index] = value |
aastore |
(none) | pops value, index, and arrayref of an array of objectrefs, assigns arrayref[index] = value |
|
Sponsored Links
|