java 关于构造方法的题

veni2012 2012-03-26 02:50:47
class Test{
void test(int i){
System.out.println("i am an it");
}
void test(String s){
System.out.println("i am a String");
}
public void main(String args[]){
Test t=new Teset();
char ch='y';
t.test(ch);
}

}

为什么输出结果是 i am an it 呢?
...全文
188 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
dryZeng 2012-03-26
  • 打赏
  • 举报
回复
其实楼主想问的是为什么char会自动转换成int执行test(int i)而不是转换成String执行test(String s),对吧?

我的理解就是,char虽然是字符型,和String有点像。
但char毕竟只表示单个字符,只占两位。
那么它就有个固定的范围,而且这个范围在int型范围之内。而String就没有一个范围了,如果把char转换成String,就有点浪费空间的感觉。
所以编译器会自动把char转换为int,而执行test(int i)方法。
quhuafeng521 2012-03-26
  • 打赏
  • 举报
回复
你这个属于方法的重载。
如果没有形参和实参数据类型相同的重载,而有形参数据类型大于实参的重载,那么实参会被提升到形参数据类型并调用该重载的方法。
菖蒲老先生 2012-03-26
  • 打赏
  • 举报
回复
楼主刚学java吧,首先你这程序根本就不能运行。
一个问题是main函数一定要是static型的,
另外把Test写成Teset了。

其次,构造函数是和类名完全一样,不带返回值的方法,比如:
public Test() {
}
最后,程序最后应该打印出i am an it

因为你传入的char类型的'y'会默认转换成int型,再执行test(int i)。

给你个完整的小例子吧。


public class Test {

public Test() {
}

void test(int i) {
System.out.println("i am an it");
}

void test(String s) {
System.out.println("i am a String");
}

public static void main(String[] args) {
Test t = new Test();
char ch = 'y';
t.test(ch);
}
}


五哥 2012-03-26
  • 打赏
  • 举报
回复
这个跟 构造函数没关系


class Test{
void test(int i){
System.out.println("i am an it");
}
void test(String s){
System.out.println("i am a String");
}
public void main(String args[]){
Test t=new Teset();
char ch='y';
t.test(ch);//这个调用 会将char转换为 int型,所以 调用的是 void test(int i),如果想调用
void test(String s)需要修改为 :t.test(""+ ch) ;//这样会转换为String


}

}

宏Lee 2012-03-26
  • 打赏
  • 举报
回复
你试试这个System.out.println('a'+1);就知道为什么
宏Lee 2012-03-26
  • 打赏
  • 举报
回复
朋友。你记错了吧。构造方法是没有返回值的,你看你的喃?你的原因是char可以转型成int类型,就调用了 void test(int i){
System.out.println("i am an it");
}
veni2012 2012-03-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 quhuafeng521 的回复:]

这个题跟构造方法半毛钱有关系都没有。
构造方法跟类的名字一样。不用声明返回类型
[/Quote]
t.test(ch)这个方法里放的是char类型的 为什么会执行void test(int i)方法呢?
安特矮油 2012-03-26
  • 打赏
  • 举报
回复
OH,这确实跟构造方法没有一点关系,你只是创建了Test的一个对象,调用了他的
void test(int i){
System.out.println("i am an it");
}
然后里面打印一句i am an it;就仅仅这样而已,如果你要打印传入的i那么应该这样写
void test(int i){
System.out.println(i + " am an it");
}

ss36290109 2012-03-26
  • 打赏
  • 举报
回复
构造器都写错..你想输出 i am a String 你也要传1个String阿.你传的是char..肯定跑上面的拉
成一粒 2012-03-26
  • 打赏
  • 举报
回复
Test t=new Teset();
char ch='y';//char是字符按ASC||编码可以用整形表示。你改成String ch="y";这样就对了
t.test(ch);
quhuafeng521 2012-03-26
  • 打赏
  • 举报
回复
这个题跟构造方法半毛钱有关系都没有。
构造方法跟类的名字一样。不用声明返回类型

67,542

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧