public class One {
private final Object o = new Object();
private final String s = (String) o;
}
-----
javap -c One:
public One();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: aload_0
5: new #2; //class java/lang/Object
8: dup
9: invokespecial #1; //Method java/lang/Object."<init>":()V
12: putfield #3; //Field o:Ljava/lang/Object;
15: aload_0
16: aload_0
17: getfield #3; //Field o:Ljava/lang/Object;
20: checkcast #4; //class java/lang/String
23: putfield #5; //Field s:Ljava/lang/String;
26: return
}
================================
public class Two {
private final Object o = new Object();
private final String s = String.class.cast(o);
}
-----
javap -c Two:
public Two();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: aload_0
5: new #2; //class java/lang/Object
8: dup
9: invokespecial #1; //Method java/lang/Object."<init>":()V
12: putfield #3; //Field o:Ljava/lang/Object;
15: aload_0
16: ldc_w #4; //class java/lang/String
19: aload_0
20: getfield #3; //Field o:Ljava/lang/Object;
23: invokevirtual #5; //Method java/lang/Class.cast:(Ljava/lang/Object;)Ljava/lang/Object;
26: checkcast #4; //class java/lang/String
29: putfield #6; //Field s:Ljava/lang/String;
32: return
}