网站首页 > 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代码实现
- 输入www.baidu.com背后经历了啥?说清楚这个,已经超过90%的人了
- 优化MySQL:为什么你应该用 UNSIGNED INT 存储IP地址
- 实模式下CPU如何获取数据及指令(实模式寻址方式)
- java基础都在这了,小主们拿去吧(java基础是指什么)
- 盘点爬虫语言为何选择Python而不是Java
- 搭载Dubbo+Zookeeper踩了这么多坑,我终于决定写下这篇
- 网络协议之TCP/IP协议(面试必考内容) - javaEE初阶 - 细节狂魔
- 深夜报警!10亿次请求暴击,如何用Redis找出最热IP?
- VPN技术(IPsec/L2TP/SSLVPN/PPTP)学习笔记
- 标签列表
-
- 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)
本文暂时没有评论,来添加一个吧(●'◡'●)