网站首页 > 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有什么区别?
你 发表评论:
欢迎- 06-15Linux中如何通过Shell脚本来控制Spring Boot的Jar包启停服务?
- 06-15推荐一款超棒的SpringCloud 脚手架项目
- 06-15IDEA将项目打包成jar包(idea打包普通java项目)
- 06-15Spring Boot3 项目 jar 包打包成 Docker 镜像全攻略
- 06-15记录Dockerfile将jar包构建成部署所需的镜像
- 06-15项目基础部署汇总八---linux下xxl-job安装
- 06-15Spring Boot Jar 包秒变 Docker 镜像实现多环境部署
- 06-15终端执行 java -jar example.jar 时报错:“没有主清单属性” 的解决
- 最近发表
-
- Linux中如何通过Shell脚本来控制Spring Boot的Jar包启停服务?
- 推荐一款超棒的SpringCloud 脚手架项目
- IDEA将项目打包成jar包(idea打包普通java项目)
- Spring Boot3 项目 jar 包打包成 Docker 镜像全攻略
- 记录Dockerfile将jar包构建成部署所需的镜像
- 项目基础部署汇总八---linux下xxl-job安装
- Spring Boot Jar 包秒变 Docker 镜像实现多环境部署
- 终端执行 java -jar example.jar 时报错:“没有主清单属性” 的解决
- 如何将本地JAR文件添加到Maven项目中
- Java 类隔离应用:多 Jar 包支持(java接口隔离原则)
- 标签列表
-
- 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)
本文暂时没有评论,来添加一个吧(●'◡'●)