我有一个非常简单的问题。
我写这样的代码片段:
Integer integer = new Integer(42);
System.out.println(integer);
问题是这里发生了什么?
好吧,由于方法重载解析过程分为三个阶段,并且初始阶段不进行装箱/拆箱操作以将参数与候选方法进行匹配,因此PrintStream
此处调用的方法应为public void println(Object x)
,因为它Integer
是一个Object
。
void println(Object x)
呼叫String.valueOf(Object)
,即Integer
的toString()
。
字节码:
0: new #16 // class java/lang/Integer
3: dup
4: bipush 42
6: invokespecial #18 // Method java/lang/Integer."<init>":(I)V
9: astore_1
10: getstatic #21 // Field java/lang/System.out:Ljava/io/PrintStream;
13: aload_1
14: invokevirtual #27 // --> Method java/io/PrintStream.println:(Ljava/lang/Object;)V
17: return
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句