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."":()V 4: aload_0 5: new #2; //class java/lang/Object 8: dup 9: invokespecial #1; //Method java/lang/Object."":()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."":()V 4: aload_0 5: new #2; //class java/lang/Object 8: dup 9: invokespecial #1; //Method java/lang/Object."":()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 }