提问人:wokki 提问时间:2/7/2018 更新时间:2/7/2018 访问量:78
为什么这个指针指向“马崇拜”而不是“马马”?
Why does this pointer point to "Horse cult" instead of "Horse horse"?
问:
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”的指针?
答:
0赞
cvifli
2/7/2018
#1
由于变量是在语句中声明的,因此无法在块外部访问该变量。因此,在语句中,它会找到可变的邪教自我。same
if
if
return
same
评论
0赞
wokki
2/7/2018
明白了!在 python 中,范围仅在处理函数时才涉及,我没有意识到 if 语句和 while 语句在 Java 中也有自己的范围。非常感谢您的帮助!
评论
Horse
same