为什么这个指针指向“马崇拜”而不是“马马”?

Why does this pointer point to "Horse cult" instead of "Horse horse"?

提问人:wokki 提问时间:2/7/2018 更新时间:2/7/2018 访问量:78

问:

1   public class Horse {
2      Horse same;
3      String jimmy;
4   
5      public Horse(String lee) {
6         jimmy = lee;
7      }
8   
9      public Horse same(Horse horse) {
10        if (same != null) {
11           Horse same = horse;
12           same.same = horse;
13           same = horse.same;
14        }
15        return same.same;
16     }
17  
18     public static void main(String[] args) {
19        Horse horse = new Horse("youve been");
20        Horse cult = new Horse("horsed");
21        cult.same = cult;
22        cult = cult.same(horse);
23        System.out.println(cult.jimmy);
24        System.out.println(horse.jimmy);
25     }
26  }

当 Java 解释器运行第 22 行时,为什么 cult.same(horse) 返回指向“Horse cult”的指针,而不是返回指向 same.same(在第 11 行初始化为 same)指向的“Horse horse”的指针?

指针 作用域 按值传递

评论

1赞 Tim Biegeleisen 2/7/2018
您的类中有一个字段和一个方法,这两个字段和方法都称为 。我很惊讶你的代码甚至可以编译,但无论如何都不要这样做。Horsesame
0赞 wokki 2/7/2018
它不是实际代码,它来自数据结构类中的讨论部分

答:

0赞 cvifli 2/7/2018 #1

由于变量是在语句中声明的,因此无法在块外部访问该变量。因此,在语句中,它会找到可变的邪教自我。sameififreturnsame

评论

0赞 wokki 2/7/2018
明白了!在 python 中,范围仅在处理函数时才涉及,我没有意识到 if 语句和 while 语句在 Java 中也有自己的范围。非常感谢您的帮助!