首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

关于基本类型的重载请问各位

2011-12-12 
关于基本类型的重载请教各位package testimport com.bruceeckel.simpletest.*public class Demotion {st

关于基本类型的重载请教各位
package test;

import com.bruceeckel.simpletest.*;

public class Demotion {
static Test monitor = new Test();
void f1(char x){System.out.println("f1(char)");}
void f1(byte x){System.out.println("f1(byte)");}
void f1(short x){System.out.println("f1(short)");}
void f1(int x){System.out.println("f1(int)");}
void f1(long x){System.out.println("f1(long)");}
void f1(float x){System.out.println("f1(float)");}
void f1(double x){System.out.println("f1(double)");}

void f2(char x){System.out.println("f2(char)");}
void f2(byte x){System.out.println("f2(byte)");}
void f2(short x){System.out.println("f2(short)");}
void f2(int x){System.out.println("f2(int)");}
void f2(long x){System.out.println("f2(long)");}
void f2(float x){System.out.println("f2(float)");}

void f3(char x){System.out.println("f3(char)");}
void f3(byte x){System.out.println("f3(byte)");}
void f3(short x){System.out.println("f3(short)");}
void f3(int x){System.out.println("f3(int)");}
void f3(long x){System.out.println("f3(long)");}


void f4(char x){System.out.println("f4(char)");}
void f4(byte x){System.out.println("f4(byte)");}
void f4(short x){System.out.println("f4(short)");}
void f4(int x){System.out.println("f4(int)");}


void f5(char x){System.out.println("f5(char)");}
void f5(byte x){System.out.println("f5(byte)");}
void f5(short x){System.out.println("f5(short)");}

void f6(char x){System.out.println("f6(char)");}
void f6(byte x){System.out.println("f6(byte)");}

void f7(char x){System.out.println("f7(char)");}

void f8(double x){System.out.println("f8(double)");}
void f8(long x){System.out.println("f8(long)");}
void f8(int x){System.out.println("f8(int)");}
void f8(short x){System.out.println("f8(short)");}

void f9(long x){System.out.println("f9(long)");}
void f9(short x){System.out.println("f9(short)");}

void f10(long x){System.out.println("f10(long)");}
void f10(int x){System.out.println("f10(int)");}//不加这条语句时却输出long型,为什么
void f10(short x){System.out.println("f10(short)");}
//void f10(byte x){System.out.println("f10(byte)");}//不加这条语句时输出型为short,加时为int,这是为什么,跟类型转换原则相左吗?
//void f10(char x){System.out.println("f10(char)");}//加这条语句输出型为short,不加时也为short,又是为什么

//测short
void f11(float x){System.out.println("f11(float)");}
void f11(int x){System.out.println("f11(int)");}
void f11(long x){System.out.println("f11(long)");}

void testDouble(){
double x = 0;
System.out.println("double argument:");
f1(x);f2((float)x);f3((long)x);f4((int)x);f5((short)x);f6((byte)x);f7((char)x);
}
void testFloat(){
float x = 0;
System.out.println("float argument:");
//新加了f8(),f10()
f1(x);f2(x);f3((long)x);f4((int)x);f5((short)x);f6((byte)x);f7((char)x);f8(x);f10((byte)x);//应该是这里有问题,换成这条语句就会出现上面的情况
//f1(x);f2(x);f3((long)x);f4((int)x);f5((short)x);f6((byte)x);f7((char)x);f8(x);f10((short)x);//但是其他地方也这样对换的话不会出现这种情况
}
void testLong(){
long x = 0;
System.out.println("long argument:");
f1(x);f2(x);f3(x);f4((int)x);f5((short)x);f6((byte)x);f7((char)x);
}
void testInt(){
int x = 0;
System.out.println("int argument:");
//新加了f9()
f1(x);f2(x);f3(x);f4(x);f5((short)x);f6((byte)x);f7((char)x);f9(x);
}
void testShort(){
short x = 0;


System.out.println("short argument:");
f1(x);f2(x);f3(x);f4(x);f5(x);f6((byte)x);f7((char)x);f11((byte)x);
}
void testByte(){
byte x = 0;
System.out.println("byte argument:");
f1(x);f2(x);f3(x);f4(x);f5(x);f6(x);f7((char)x);
}
void testChar(){
char x = 0;
System.out.println("char argument:");
f1(x);f2(x);f3(x);f4(x);f5(x);f6(x);f7(x);
}

public static void main(String args[]){
Demotion p = new Demotion();
p.testDouble();
p.testFloat();
p.testLong();
p.testInt();
p.testShort();
p.testByte();
p.testChar();
monitor.expect(new String[]{
"double argument:",
"f1(double)",
"f2(float)",
"f3(long)",
"f4(int)",
"f5(short)",
"f6(byte)",
"f7(char)",
"float argument:",
"f1(float)",
"f2(float)",
"f3(long)",
"f4(int)",
"f5(short)",
"f6(byte)",
"f7(char)",
"f8(double)",
"f10(short)",
"long argument:",
"f1(long)",
"f2(long)",
"f3(long)",
"f4(int)",
"f5(short)",
"f6(byte)",
"f7(char)",
"int argument:",
"f1(int)",
"f2(int)",
"f3(int)",
"f4(int)",
"f5(short)",
"f6(byte)",
"f7(char)",
"f9(long)",
"short argument:",
"f1(short)",
"f2(short)",
"f3(short)",
"f4(short)",
"f5(short)",
"f6(byte)",
"f7(char)",
"f11(int)",
"byte argument:",
"f1(byte)",
"f2(byte)",
"f3(byte)",
"f4(byte)",
"f5(byte)",
"f6(byte)",
"f7(char)",
"char argument:",
"f1(char)",
"f2(char)",
"f3(char)",
"f4(char)",
"f5(char)",
"f6(char)",
"f7(char)"
});
}

}


[解决办法]
楼主,我试了一下,没有什么问题,我可能不明白你说的意思。基本类型从低到高顺序为:byte short int long float double.当从低到高赋值时,系统自动完成类型转换。由高到低,须强制显示类型转换。
例如如果只有
void f10(long x){System.out.println("f10(long)");} 
void f10(int x){System.out.println("f10(int);}
void f10(short x){System.out.println("f10(short)");} 
这三个语句时,
void testFloat(){ 
float x = 0; 
System.out.println("float argument:"); 
//新加了f8(),f10() 
f1(x);f2(x);f3((long)x);f4((int)x);f5((short)x);f6((byte)x);f7((char)x);f8(x);f10((byte)x);输出结果为:
float argument:
f1(float)
f2(float)
f3(long)
f4(int)
f5(short)
f6(byte)
f7(char)
f8(double)
f10(short)
,因为你的f10中没有byte,所以byte自动转为short输出。
其他的你自己在看看。
[解决办法]
楼上正解\

热点排行