Lade einen
Mit Hilfe von arrayref und index
wird der Wert value ermittelt und auf den Stapel gelegt.
Dabei ist value vom Typ Beispiel: char[] c = {'A', 'B'}; 0: iconst_2
1: newarray char
3: dup
4: iconst_0
5: bipush 65
7: castore
8: dup
9: iconst_1
10: bipush 66
12: castore
13: astore_1
char c0 = c[0]; 14: aload_1
15: iconst_0
16: caload
17: istore_2 Mit
Speichere einen
Auf dem Operandenstapel befinden sich, vor der Ausführung des Befehls, die
Referenz auf das Array, der Index des Elements im Array und der zu speichernde
Stelle fest, ob der Typ eines Objekts (Objektvariablen) in einen anderen bestimmten Typ umgewandelt werden kann.
Mit Hilfe der vorzeichenlosen Bytes indexbyte1 und
indexbyte2 wird ein Index im (Laufzeit-)Konstantenpool der
aktuellen Klasse berechnet: (indexbyte1 << 8) |
indexbyte2. Mit diesem Index kann eine entsprechende Referenz
auf eine Klasse, ein Array oder ein Interface erhalten werden. Falls der Typ des
durch objectref referenzierten Objekts in den ermittelten
Klassen-, Array- oder Interface-Typ umgewandelt werden kann, bleibt der
Operandenstapel unverändert. Kann die beabsichtigte Umwandlung (Cast) des
Objekttyps nicht erfolgen, wird eine Beispiel 1: Die Umwandlungen von Objekttypen durch Typ-Cast-Operatoren im folgenden Beispielprogramm sind alle bis auf die auskommentierte Anweisung zulässig. public class Test { public static void main(String[] args) { Object obj = new Integer(3); Integer i = (Integer)obj; Number n = (Number)obj; Comparable c = (Comparable)obj; //Byte b = (Byte)obj; //Fehler: ClassCastException Object[] obja = new Integer[3]; Integer[] ia = (Integer[])obja; } } Der Beispiel 2: Der Typ des Objektvariablen Object obj = new Integer(3); 0: new #2; //class java/lang/Integer
3: dup
4: iconst_3
5: invokespecial #3; //Method
java/lang/Integer."<init>":(I)V
8: astore_1
Integer i = (Integer)obj; 9: aload_1
10: checkcast #2;
//class java/lang/Integer
13: astore_2 |
||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||