是这样的,结合内存分析,把执行过程缕一下:
首先在main方法中有个局部变量str,赋值为“1234”,这是在内存中的情况是:str作为引用在栈中,字符串1234在数据区,这个str是第一个str。
然后把str传给另一个方法,那个方法的参数str,也要放在栈中,此str非原先的str,这是第二个str,传入后第二个str也指向“1234”。这时栈中就有两个str。
然后你把“welcome”给了第二个str,也就是说第二个str指向了“welcome”,“welcome”作为字符串在数据区。
然后方法结束,栈中的关于此方法的变量都要出栈,第二个str出栈。
回到main方法,打印str,当然还是第一个str的值,而这个str一直指向的都是“1234”。
明白否? |