求解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
结果的第二行是哪来的,没看明白 展开
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
结果的第二行是哪来的,没看明白 展开
1个回答
展开全部
你调用
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()去掉试试
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询