需要帮助理解此代码的输出

Man*_*ano -1 java

我是初学者,所以它真的没有比这简单.
我在一个文件夹中有两个单独的.java文件.
负责狗的"属性"(名称,年龄,品种等)的类.

   ...
   public String name;
   public byte age;
   public String breed;

      public String makeNoise()
      {
         return "Woof...";
      }

      public String toString()
      {
         return "Name: " +name +"\n" +"Age: " +age +"\n" +"Breed: " +breed;
      }
      ...
Run Code Online (Sandbox Code Playgroud)

还有一个测试狗类的测试员.

  ...  
  Dog d1 = new Dog();
  d1.name = "Frodo";
  d1.age = 4;
  d1.breed = "Alsatian";

  Dog d2 = new Dog();
  d2.name = "Labby";
  d2.age = 3;
  d2.breed = "Labrador";

  Dog d3 = d2;
  d3.age = 6;
  d3.name = "Mike";


 System.out.println(d1.name);
 System.out.println(d2.age);
 System.out.println(d3.age);
 System.out.println(d2.name);

 System.out.println(d1.age == d2.age);
 System.out.println(d1 == d2);
 System.out.println(d1 == d3);
 System.out.println(d2 == d3);
 ...
Run Code Online (Sandbox Code Playgroud)

的输出

System.out.println(d2.age);
Run Code Online (Sandbox Code Playgroud)

由于某种原因返回6,我不明白为什么.任何帮助将非常感激.

Era*_*ran 5

当你完成作业

Dog d3 = d2;
Run Code Online (Sandbox Code Playgroud)

您正在将Dog对象的引用从d2变量复制到d3变量.您没有制作该对象的副本.

因此,在转让之后,双方d3d2指向同一个Dog对象.因此d3.age = 6;导致d2.age6.