网站首页 > java教程 正文
基本类型能从一个“较小”的类型自动提升至一个“较大”的类型,此过程一旦牵涉到重 载,可能会造成一些混淆。
最终结论:
- 实际参数是常量数字5时,按int,long,float,double顺序找函数
- 实际参数是char型时,按char,int,long,float,double顺序找函数
- 实际参数是byte型时,按byte,short,int,long,float,double顺序找函数
- 实际参数是short型时,按short,int,long,float,double顺序找函数
- 实际参数是int型时int,按long,float,double顺序找函数
- 实际参数是long 型时,按long,float,double顺序找函数
- 实际参数是 float 型时,按float,double顺序找函数
- 实际参数是 double 型时,只找参数是double的函数
下面是具体的代码例子。
实际参数是常量数字5时,int,long,float,double顺序找函数
结论:常数值5被当作int值处理,所以如果有某个重载方法接受int型参数,它就会被调用。至于其他情况,如果传入的数据类型(实际参数类型)小于方法中声明的形式参数类型,实际数据类型就会被提升。
下面我们跟一下代码:
char、byte、short、int、long、float、double的情况,5传到了int参数所在函数
void f1(char x) {
System.out.print("f1(char) ");
}
void f1(byte x) {
System.out.print("f1(byte) ");
}
void f1(short x) {
System.out.print("f1(short) ");
}
void f1(int x) {
System.out.print("f1(int) ");
}
void f1(long x) {
System.out.print("f1(long) ");
}
void f1(float x) {
System.out.print("f1(float) ");
}
void f1(double x) {
System.out.print("f1(double) ");
}
我们用idea的debug一步步跟一下,看看:
可以Step Into看看:
即:
byte、short、int、long、float、double的情况,5传到了int参数所在函数
现在看看少一个char的情况:
void f2(byte x) {
System.out.print("f2(byte) ");
}
void f2(short x) {
System.out.print("f2(short) ");
}
void f2(int x) {
System.out.print("f2(int) ");
}
void f2(long x) {
System.out.print("f2(long) ");
}
void f2(float x) {
System.out.print("f2(float) ");
}
void f2(double x) {
System.out.print("f2(double) ");
}
Step Into:
也还是int的方法:
short、int、long、float、double的情况,5传到了int参数所在函数
现在看看再少一个byte的情况:
void f3(short x) {
System.out.print("f3(short) ");
}
void f3(int x) {
System.out.print("f3(int) ");
}
void f3(long x) {
System.out.print("f3(long) ");
}
void f3(float x) {
System.out.print("f3(float) ");
}
void f3(double x) {
System.out.print("f3(double) ");
}
Step Into:
int、long、float、double的情况,5传到了int参数所在函数
long、float、double的情况,5传到了long参数所在函数
float、double的情况,5传到了float参数所在函数
double的情况,5传到了double参数所在函数
即:
5: f1(int) f2(int) f3(int) f4(int) f5(long) f6(float) f7(double)
再重复下:你会发现常数值5被当作int值处理,所以如果有某个重载方法接受int型参数,它就会被调用。至于其他情况,如果传入的数据类型(实际参数类型)小于方法中声明的形式参数类型,实际数据类型就会被提升。
实际参数是char型时,char,int,long,float,double顺序找函数
结论:char型略有不同,如果无法找到恰好接受char参数的方法,就会把char直接提升至int型。
char、byte、short、int、long、float、double的情况,'x'传到了 char 参数所在函数
byte、short、int、long、float、double的情况,'x'传到了int参数所在函数
short、int、long、float、double的情况,'x'传到了 int 参数所在函数
int、long、float、double的情况,'x'传到了 int 参数所在函数
long、float、double的情况,'x'传到了 long 参数所在函数
float、double的情况,'x'传到了 float 参数所在函数
double的情况,'x'传到了 double 参数所在函数
实际参数是byte型时,byte,short,int,long,float,double顺序找函数
顺序找函数
char、byte、short、int、long、float、double的情况, byte 传到了 byte 参数所在函数
byte、short、int、long、float、double的情况, byte 传到了 byte 参数所在函数
short、int、long、float、double的情况, byte 传到了 short 参数所在函数
int、long、float、double的情况, byte 传到了 int 参数所在函数
long、float、double的情况, byte 传到了 long 参数所在函数
float、double的情况, byte 传到了 float 参数所在函数
double的情况, byte 传到了 double 参数所在函数
实际参数是short型时,short,int,long,float,double顺序找函数
顺序找函数
char、byte、short、int、long、float、double的情况, short 传到了 short 参数所在函数
byte、short、int、long、float、double的情况, short 传到了 short 参数所在函数
short、int、long、float、double的情况, short 传到了 short 参数所在函数
int、long、float、double的情况, short 传到了int 参数所在函数
long、float、double的情况, short 传到了 long 参数所在函数
float、double的情况, short 传到了float 参数所在函数
double的情况, short 传到了double 参数所在函数
实际参数是int型时int,long,float,double顺序找函数
char、byte、short、int、long、float、double的情况, 传到了 int 参数所在函数
byte、short、int、long、float、double的情况, 传到了 int 参数所在函数
short、int、long、float、double的情况, 传到了 int 参数所在函数
略
int、long、float、double的情况, 传到了 int 参数所在函数
略
long、float、double的情况, 传到了 long 参数所在函数
略
float、double的情况, 传到了 float 参数所在函数
略
double的情况, 传到了 double 参数所在函数
略
实际参数是long 型时long,float,double顺序找函数
char、short、int、long、float、double的情况, 传到了 long 参数所在函数
略
short、int、long、float、double的情况, 传到了 long 参数所在函数
略
int、long、float、double的情况, 传到了 long 参数所在函数
略
long、float、double的情况, 传到了 long 参数所在函数
略
float、double的情况, 传到了 float 参数所在函数
略
double的情况, 传到了 double 参数所在函数
略
实际参数是 float 型时float,double顺序找函数
char、short、int、long、float、double的情况, 传到了 float 参数所在函数
略
short、int、long、float、double的情况, 传到了 float 参数所在函数
int、long、float、double的情况, 传到了 float 参数所在函数
略
long、float、double的情况, 传到了 float 参数所在函数
略
float、double的情况, 传到了 float 参数所在函数
略
double的情况, 传到了 double 参数所在函数
略
实际参数是 double 型时,double顺序找函数
char、short、int、long、float、double的情况, 传到了 double 参数所在函数
short、int、long、float、double的情况, 传到了 double 参数所在函数
int、long、float、double的情况, 传到了 float 参数所在函数
略
long、float、double的情况, 传到了 double 参数所在函数
略
float、double的情况, 传到了 double 参数所在函数
略
double的情况, 传到了 double 参数所在函数
略
代码部分来自Java编程思想
猜你喜欢
- 2024-11-01 Java | 深入理解方法调用的本质(含重载与重写区别)
- 2024-11-01 Java中的方法重载和方法重写的区别
- 2024-11-01 经典回答:《重载和重写的区别》Java面试冲击月薪40K高薪
- 2024-11-01 java 核心技术-12版 卷Ⅰ- 4.6 对象构造 4.6.1重载
- 2024-11-01 Java语言基础图解-第二阶段(继承-重载-重写-多态-抽象-接口)
- 2024-11-01 阿瑟Java (17):重载、重写有区别吗?
- 2024-11-01 Java基础——构造器重载 & this关键字
- 2024-11-01 「Java面试题」常规Java面试题分享
- 2024-11-01 Java每日一题之重载和重写有什么区别?
- 2024-11-01 Java里方法重写override与方法重载overload有什么区别?
你 发表评论:
欢迎- 最近发表
-
- Java常量定义防暴指南:从"杀马特"到"高富帅"的华丽转身
- Java接口设计原则与实践:优雅编程的艺术
- java 包管理、访问修饰符、static/final关键字
- Java工程师的代码规范与最佳实践:优雅代码的艺术
- 编写一个java程序(编写一个Java程序计算并输出1到n的阶乘)
- Mycat的搭建以及配置与启动(mycat部署)
- Weblogic 安装 -“不是有效的 JDK Java 主目录”解决办法
- SpringBoot打包部署解析:jar包的生成和结构
- 《Servlet》第05节:创建第一个Servlet程序(HelloSevlet)
- 你认为最简单的单例模式,东西还挺多
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)