package test;public class Dog {
 public Dog(String s) {
    System.out.println("s = " + s);
  }
  public Dog(int i) {
    this("i = " + i);
  }
  public static void main(String args[]) {
    new Dog("String call");
    new Dog(47);
  }
}
为什么测试出来是
s = String call
s = i = 47
 
这里的第二个为什么有s= 不是直接i=47的么?

解决方案 »

  1.   

    因为你第二个构造方法里面调用了this,实际效果是
    public Dog(int i){
    Dog("i = " + i);
    }
      

  2.   

    是不是里面调用的是
    public Dog(String s)  这个函数
      

  3.   


    是的,this那行改成System.out.println("i = " + i);就可以了
      

  4.   

    对!这个例子主要是介绍this指针(引用)的和重载的。Dog("i="+i);这里"i"+i会有一个隐式的转换,它的结果会变成String类型,所以它的引用的就是public Dog(String s);这个构造函数
      

  5.   


    System.out.println("i = " + i);
    这样 输出就变成s = String call
    i = 47
      

  6.   

    对,LZ的那个看起来超级别扭
    Dog("i = " + i);  里面的参数就成了字符串的形式,所以打印出s = i =