public class Main{
public static void fun(String a){
3.a+="BinJianBishiMianShi";
}
public static void main(String[] ags){
System.out.println(a);
}
}
结果为 Hello
笔试的懵懂的局部变量 引用传递 蒙对了答案 结果面试官细问到底如何实现 支支吾吾不知所以
分析
首先 String 类是不可变的 拼接和截取都会产生新的对象
String a="Hello";
a:放在栈中
Hello放在方法区的运行时常量池中
由上图所示
在1处 栈中a指向 Hello
在2处 a传入函数的时候仍然指向Hello,此a为a_copy
在3处进行拼接的时候 在运行时常亮池中产生新的HelloBinJianBishiMianShi
a_copy如红色箭头执行新的字符串
但是在主函数中打印的仍然是原来的a,所以仍然是Hello
你懂了吗,反正我懂了
原文:https://www.cnblogs.com/bowenqianngzhibushiwo/p/11651234.html