最近在看java编程思想,准备系统的巩固一下基础知识。
对于重载时候基本类型的转换,以前没有很注意到,现在记录一下,增加些印象
对于在重载过程中,基本数据类型能从一个“较小“的类型自动提升至一个“较大”的类型。但是如果传入的实际参数大于重载方法声明的形式参数,必须通过类型转换执行窄化转换,否则编译器会报错
由小到大自动转换:
public class PrimitiveOverloading {
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 )");}
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 )");}
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 )");}
void f4(int x ) {System.out.print("f4(int )");}
void f4(long x ) {System.out.print("f4(long )");}
void f4(float x ) {System.out.print("f4(float )");}
void f4(double x ) {System.out.print("f4(double )");}
void f5(long x ) {System.out.print("f5(long )");}
void f5(float x ) {System.out.print("f5(float )");}
void f5(double x ) {System.out.print("f5(double )");}
void f6(float x ) {System.out.print("f6(float )");}
void f6(double x ) {System.out.print("f6(double )");}
void f7(double x ) {System.out.println("f7(double )");}
void testChar(){
char x ='x';
System.out.print("char: ");
f1(x);f2(x);f3(x);f4(x);f5(x);f6(x);f7(x);
}
void testByty(){
byte x = 0;
System.out.print("byte: ");
f1(x);f2(x);f3(x);f4(x);f5(x);f6(x);f7(x);
}
void testShort(){
Short x = 0;
System.out.print("Short: ");
f1(x);f2(x);f3(x);f4(x);f5(x);f6(x);f7(x);
}
void testInt(){
int x = 0;
System.out.print("int: ");
f1(x);f2(x);f3(x);f4(x);f5(x);f6(x);f7(x);
}
void testLong(){
long x = 0l;
System.out.print("long: ");
f1(x);f2(x);f3(x);f4(x);f5(x);f6(x);f7(x);
}
void testFloat(){
float x = 0;
System.out.print("char: ");
f1(x);f2(x);f3(x);f4(x);f5(x);f6(x);f7(x);
}
void testDouble(){
double x = 0;
System.out.print("double: ");
f1(x);f2(x);f3(x);f4(x);f5(x);f6(x);f7(x);
}
public static void main(String[] args) {
PrimitiveOverloading p = new PrimitiveOverloading();
p.testChar();
p.testByty();
p.testShort();
p.testInt();
p.testLong();
p.testFloat();
p.testDouble();
}
}
char: f1(char )f2(int )f3(int )f4(int )f5(long )f6(float )f7(double )
byte: f1(byte )f2(byte )f3(short )f4(int )f5(long )f6(float )f7(double )
Short: f1(short )f2(short )f3(short )f4(int )f5(long )f6(float )f7(double )
int: f1(int )f2(int )f3(int )f4(int )f5(long )f6(float )f7(double )
long: f1(long )f2(long )f3(long )f4(long )f5(long )f6(float )f7(double )
char: f1(float )f2(float )f3(float )f4(float )f5(float )f6(float )f7(double )
double: f1(double )f2(double )f3(double )f4(double )f5(double )f6(double )f7(double )
Process finished with exit code 0
通过结果可以证实,如果传入的数据类型小于方法中声明的形式参数类型,实际数据类型就会别提升。
char类型略有不同,如果无法找到恰好接受char参数的方法,就会吧char直接提升到int型
由大到小转换必须执行窄化转换
public class Demotion {
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 )");}
void f2(char x ) {System.out.print("f2(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 f3(char x ) {System.out.print("f3(char )"); }
void f3(byte x ) {System.out.print("f3(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 f4(char x ) {System.out.print("f4(char )"); }
void f4(byte x ) {System.out.print("f4(byte )");}
void f4(short x ) {System.out.print("f4(short )");}
void f4(int x ) {System.out.print("f4(int )");}
void f5(char x ) {System.out.print("f5(char )"); }
void f5(byte x ) {System.out.print("f5(byte )");}
void f5(short x ) {System.out.print("f5(short )");}
void f6(char x ) {System.out.print("f6(char )"); }
void f6(byte x ) {System.out.print("f6(byte )");}
void f7(char x ) {System.out.print("f7(char )"); }
void testDouble(){
double x = 0;
System.out.print("double: ");
f1(x);f2((float)x);f3((long)x);f4((int)x);f5((short)x);f6((byte)x);f7((char)x);
}
public static void main(String[] args) {
Demotion d = new Demotion();
d.testDouble();
}
}
double: f1(double )f2(float )f3(long )f4(int )f5(short )f6(byte )f7(char )
Process finished with exit code 0