请给出下列程序的运行结果:
![872637e33617311d3f2304b2cf7a2daf.png](https://img-blog.csdnimg.cn/img_convert/872637e33617311d3f2304b2cf7a2daf.png)
1.main主程序中第一行代码创建ex对象:
StringTest ex = new StringTest();
内存图为:
![706d3653de1163dd5d48fd4ba7425302.png](https://img-blog.csdnimg.cn/img_convert/706d3653de1163dd5d48fd4ba7425302.png)
2.执行ex.change(ex.str, ex.ch);语句,进入change方法中,在栈中生成方法的形参,由于ex.str和ex.ch为引用数据类型,将ex.str和ex.ch的地址值分别传入change方法中形参str和ch(关于方法中形参的传递知识,可了解Java中的值传递机制)
![3ba7c1f1037c4fa3798f68341a731578.png](https://img-blog.csdnimg.cn/img_convert/3ba7c1f1037c4fa3798f68341a731578.png)
3.执行change方法中的str = "test ok";和ch[0] = 'b';语句。由于字符串类型不可变性(在String源码中声明为final类型),即字符串一旦创建便不可更改,如果要对字符串进行重新赋值,需要在字符串常量池中新建(字符串常量池中相同的字符串只存在一个,如果要赋的值已经有,则把该字符串的地址值赋给要赋值的变量),所以change方法中的str指向新创建的test ok字符串
![646071fa490fb7c5fb612db1bd484911.png](https://img-blog.csdnimg.cn/img_convert/646071fa490fb7c5fb612db1bd484911.png)
4.change方法结束,Java回收机制对形参变量回收,由于字符串常量池中tesk ok没有被利用,因此也自动回收,故最终ex.str和ex.ch的输出为good和best
![afec45e8cd91ca8019b166402d31a680.png](https://img-blog.csdnimg.cn/img_convert/afec45e8cd91ca8019b166402d31a680.png)
复习时发现上次发的文章有点小瑕疵,没有考虑到属性中String类型的创建方式为new的方式(所以默认为字面量的方式定义了,此方式的内存图请参考上面),因此增加了通过new方式创建str的内存图解:
请给出下列程序的运行结果:
![66e610845fb127562d2fc08ddfa3982e.png](https://img-blog.csdnimg.cn/img_convert/66e610845fb127562d2fc08ddfa3982e.png)
1.main主程序中第一行代码创建ex对象:
StringTest ex = new StringTest();
通过new的方式创建String,会在堆空间创建对象用来存储String中的字符数组value的值
内存图为:
![105979f2aeb69f31ebc8e1ef29a6f57d.png](https://img-blog.csdnimg.cn/img_convert/105979f2aeb69f31ebc8e1ef29a6f57d.png)
2.执行ex.change(ex.str, ex.ch);语句,进入change方法中,在栈中生成方法的形参,由于ex.str和ex.ch为引用数据类型,将ex.str和ex.ch的地址值分别传入change方法中形参str和ch(关于方法中形参的传递知识,可了解Java中的值传递机制)
![8d055d01edac9bfec9bdb5515fc1ad72.png](https://img-blog.csdnimg.cn/img_convert/8d055d01edac9bfec9bdb5515fc1ad72.png)
3.执行change方法中的str = "test ok";和ch[0] = 'b';语句。由于字符串类型不可变性(在String源码中声明为final类型),即字符串一旦创建便不可更改,如果要对字符串进行重新赋值,需要在字符串常量池中新建(字符串常量池中相同的字符串只存在一个,如果要赋的值已经有,则把该字符串的地址值赋给要赋值的变量),所以change方法中的str指向新创建的test ok字符串
![4c6f4aed9af01ba95b067cf0a21c338e.png](https://img-blog.csdnimg.cn/img_convert/4c6f4aed9af01ba95b067cf0a21c338e.png)
4.change方法结束,Java回收机制对形参变量回收,由于字符串常量池中tesk ok没有被利用,因此也自动回收,故最终ex.str和ex.ch的输出为good和best
![deb18e8a0baa8ac0f70d7f0e1c64cfa2.png](https://img-blog.csdnimg.cn/img_convert/deb18e8a0baa8ac0f70d7f0e1c64cfa2.png)