Set field in object (wide index)
Format
putfield_w
indexbyte1
indexbyte2
Forms
putfield_a_w = 177 (0xb1) putfield_b_w = 178 (0xb2) putfield_s_w = 179 (0xb3) putfield_i_w = 180 (0xb4)
Stack
…, objectref, value → …
OR
…, objectref, value.word1, value.word2 → …
Description
The unsigned indexbyte1 and indexbyte2 are used to construct an index into the constant pool of the current package ( Section 3.5, Frames), where the value of the index is (indexbyte1 « 8) | indexbyte2. The constant pool item at the index must be of type CONSTANT_InstanceFieldref ( Section 6.7.2, CONSTANT_InstanceFieldref, CONSTANT_VirtualMethodref, and CONSTANT_SuperMethodref), a reference to a class and a field token.
The class of objectref must not be an array. If the field is protected, and it is a member of a superclass of the current class, and the field is not declared in the same package as the current class, then the class of objectref must be either the current class or a subclass of the current class. If the field is final, it must be declared in the current class.
The item must resolve to a field with a type that matches t, as follows:
value must be of a type that is assignment compatible with the field descriptor (t) type.
The width of a field in a class instance is determined by the field type specified in the instruction. The item is resolved, determining the field offset<SUP>[12]</SUP>. The objectref, which must be of type reference, and the value are popped from the operand stack. If the field is of type byte or type boolean, the value is truncated to a byte. The field at the offset from the start of the object referenced by objectref is set to the value.
Runtime Exception
If objectref is null, the putfieldw instruction throws a NullPointerException. Notes In some circumstances, the putfieldw instruction may throw a SecurityException if the current context ( Section 3.4, Contexts) is not the owning context ( Section 3.4, Contexts) of the object referenced by objectref. The exact circumstances when the exception will be thrown are specified in Chapter 6 of the Runtime Environment Specification, Java Card Platform, Version 2.2.2.
If a virtual machine does not support the int data type, the putfield_i_w instruction will not be available.