首先,假如你这个是一个整形变量,你觉得会变吗?局部变量的作用域?
第二个,字符串是存储在方法区的常量池里面,你的main方法里面这个str就指向了常量池的“1234”,
然后,changeStr(str);调用changeStr方法,创建的是一个新的局部变量str,使用完了就释放了,main里面的str还是指向“1234”
再者:在Java中由于有基本类型形参不可能改变实参,引用类型的形参可以改变形参,这确实是的,但是字符串是存储在常量池中,假如写了这一句,String str = new String("1234"); 那么str指向堆内存的一个对象,这个对象里面又存着指向常量池“1234”的地址,而,str = “1234”;会直接指向常量池,
最后问你一句,你认为你的这条语句 changeStr(str); 等价于str = "welcome"; 吗?
|