黑马程序员技术交流社区
标题:
关于重载
[打印本页]
作者:
罗海云
时间:
2013-2-27 15:38
标题:
关于重载
本帖最后由 罗海云 于 2013-2-27 20:14 编辑
package com.itheima.p1.text;
class Text{
public static void main(String[] args){
someMethod(1);
}
public static void someMethod(int i){
System.out.println("int 版本被调用");
}
public static void someMethod(Integer i){
System.out.println("Integer 版本被调用");
}
}
输出结果为:
int版本被调用,.
自动装箱动作为什么没发生呢?
有人能解释下为什么吗?
作者:
夏振博
时间:
2013-2-27 16:02
本帖最后由 夏振博 于 2013-2-27 16:10 编辑
当只有Integer参数方法是编译器会做如下操作:(反编译器文件)
import java.io.PrintStream;
class Test
{
Test()
{
}
public static void main(String args[])
{
someMethod(Integer.valueOf(1));
}
public static void someMethod(Integer i)
{
System.out.println("Integer \u7248\u672C\u88AB\u8C03\u7528");
}
复制代码
说明这种传参也可以自动包装。
当有Integer和int两种参数方法时编译器做如下操作:(反编译器文件)
import java.io.PrintStream;
class Test
{
Test()
{
}
public static void main(String args[])
{
someMethod(1);
}
public static void someMethod(Integer i)
{
System.out.println("Integer \u7248\u672C\u88AB\u8C03\u7528");
}
public static void someMethod(int i)
{
System.out.println("int \u7248\u672C\u88AB\u8C03\u7528");
}
}
复制代码
结果他没有自动包装,说明当有匹配的整数基本类型时编译器不会自动包装,注:当有long等整数基本类型时也不会自动装箱,会对参数进行加宽处理,转换成long类型
作者:
谢达
时间:
2013-2-27 19:54
Java虚拟机直接根据我们运行的实际环境给我们将数据类型进行转换(这里的转换是指在类和基本数据类型之间的转换)。明显这里你传的实参(int型)有匹配的,它就不会自动包装,当你去掉public static void someMethod(int i);它就会帮你自动装箱,从而调用public static void someMethod(Integer i);
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2