package exercise;public class UnCloneAA
   {
      private int i;
      private int j;      public UnCloneAA ( int ii , int jj )
         {
            i = ii;
            j = jj;
         }      public void doublevalue ( )
         {
            i *= 2;
         }      public String toString ( )
         {
            return Integer.toString ( i );
         }      public static void main ( String [ ] args )
         {
            UnCloneAA b1 = new UnCloneAA ( 111 , 222 );
            System.out.println ( b1 );
         }
   }显示的值为:111这是为什么呀?

解决方案 »

  1.   

    System.out.println ( b1 ); //相当于System.out.println ( b1.toString() );
      

  2.   

    object具有缺省的toString方法,而我们为了自己的需要,会重写他.
    你可以尝试将上面的toString方法注释掉,看会打印出什么?
    可以去查jdk文档.
    这个是原始的toString方法:
    getClass().getName() + '@' + Integer.toHexString(hashCode())当System.out.println(对象)时就会调用toString方法.它是每一个非基本类型的对象都具有的方法!
      

  3.   

    注释掉toString方法就显示UnCloneAA@8ed465
    为什么是这样?
      

  4.   

    这都不会,确实够菜, toString方法是要覆盖的,不覆盖调用父类的toString方法,也就是调用object的toString方法,而object的这个方法形式是:
    getClass().getName() + '@' + Integer.toHexString(hashCode())这样你就明白了吧
      

  5.   

    注释掉toString方法就显示UnCloneAA@8ed465
    为什么是这样?我不是解释的很清楚吗?
      

  6.   

    interhanchi(最欣赏的人--Bruce Eckel.) 是正解。
      

  7.   

    楼主是够戗,println(b1)等价于println(b1.toString()),你的b1.toString()很清楚的告诉你将i字符川化并返回,i=111!
      

  8.   

    getClass().getName() + '@' + Integer.toHexString(hashCode());
    Integer.toHexString()表示用十六进制显示;
    那么hashCode()是干什么的?