求解java构造器的一道题

publicclassXxx{privateinti;Xxxx;publicXxx(){i=10;x=null;}publicXxx(inti){this.i=i;x=n... public class Xxx {
private int i;
Xxx x;

public Xxx() {
i = 10;
x = null;
}
public Xxx(int i) {
this.i = i;
x = new Xxx();
}

public void print(){
System.out.println("第一个i= " + i);
System.out.println("x= " + x);
}
@Override
public String toString() {
return "i*****= " + i;
}

}

public class TestXxx {
public static void main(String[] args) {
Xxx x = new Xxx(100);
x.print();
System.out.println("main方法 " + x.x);
}
}
运行结果:
第一个i= 100
x= i*****= 10
main方法 i*****= 10

结果的第二行是哪来的,没看明白
展开
 我来答
历盆郁7
2013-10-20 · TA获得超过4277个赞
知道大有可为答主
回答量:1795
采纳率:100%
帮助的人:954万
展开全部

你调用

x.print();

的时候,执行

    public void print() {
        System.out.println("第一个i= " + i);
        System.out.println("x= " + x);
    }

这里的第一行没啥说的了

关键是第二行,你输出x,java默认的将对象转化为字符串(调用toString())

你在Xxx里改写了toString(),所以会调用toString(),这个x的字符串形式就是toString()的内容


如果你不重写tostring(),x的字符串形式是 类名@hashCode,参考 Object的toString()

    public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }
追问
Xxx x = new Xxx(100)调用的是有参构造
public Xxx(int i) {
this.i = i;
x = new Xxx();
}
x = new Xxx()跟toString有关系或者影响吗
追答
有,不信你吧toString()去掉试试
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式