和朋友闲聊,聊到了一个问题,方法如下
private String name = "zhangsan";
@Test
public void test0(){
System.out.println(name);
String name = "wangwu";
System.out.println(name);
}
能这么定义name吗,把我说懵了
事实上是可以的,第一个打印的name是zhangsan,第二个name是wangwu,并且之后的全是王五,原因呢?
第一个name,它的成员变量以及对象是被整体存放到堆中的,而第二个name,即局部变量则是被存放在栈中的,当第二次打印时,局部变量优先使用,从而被先行打印出来。