我的Java开发学习之旅------>Java String对象作为参数传递的问题解惑
来源:互联网 发布:学python要电脑吗 编辑:程序博客网 时间:2024/05/18 03:35
又是一道面试题,来测试你的Java基础是否牢固。
题目:以下代码的运行结果是?
public class TestValue {public static void test(String str) {str="World"; //代码3}public static void main(String[] args) {String string = "Hello"; //代码1test(string); //代码2System.out.println(string); //代码4}}
运行结果是:Hello
解析:运行到达代码1时,系统在堆内存中开辟一个内存空间来生成一个String对象,并把这个对象的值设为“Hello”,然后将该对象分配给栈内存中的string变量来引用。变量string是被实际分配的引用对象,此引用保存着“Hello”在堆内存的地址值。
运行到达代码2,进入test(String str)方法,变量string的(引用)值的副本被传递给test方法。即将string变量的副本赋给test方法的形参str。此时变量string和test()方法内的变量str都是引用内存中的值为“Hello”的String对象。
运行到达代码3时,系统在堆内存中开辟一个内存空间来生成一个新的String对象,并把这个对象的值设为“World”,然后将该对象分配给栈内存中的str变量来引用。此时变量string仍然引用内存中的值为“Hello”的String对象,而test()方法内的变量str则引用内存中的值为“World”的String对象。
运行到达代码4时,test(String str)方法结束了,方法内的变量str作用消失,栈内存中没有了变量str,还有变量string。堆内存中值为“Hello”的String对象依然被变量string引用,值为“World”的String对象没有被引用。所以打印结果为:Hello
下面是内存示意图。
当然如果我们真的需要改变对象的值,可以尝试使用StringBuffer对象来处理。代码如下
public class TestValue {public static void main(String[] args) { StringBuilder string = new StringBuilder("Hello"); change(string); System.out.println(string); } public static void change(StringBuilder str) { str.delete(0, 5).append("World"); } }
打印结果为:World
读者也可以参考以下链接:
http://www.programcreek.com/2013/09/string-is-passed-by-reference-in-java/
==================================================================================================
作者:欧阳鹏 欢迎转载,与人分享是进步的源泉!
转载请保留原文地址:http://blog.csdn.net/ouyang_peng
==================================================================================================
- 我的Java开发学习之旅------>Java String对象作为参数传递的问题解惑
- java的String类型作为参数传递
- Java之把String对象作为方法的参数
- 我的Java开发学习之旅------>Java语言中方法的参数传递机制
- java中参数的传递解惑
- Java-String类型的参数传递问题
- Java-String类型的参数传递问题
- Java-String类型的参数传递问题
- Java-String类型的参数传递问题
- Java-String类型的参数传递问题
- Java-String类型的参数传递问题
- Java-String类型的参数传递问题
- Java-String类型的参数传递问题
- [Java]String类型的参数传递问题
- Java-String类型的参数传递问题
- Java-String类型的参数传递问题
- Java-String类型的参数传递问题
- 对象作为参数传递的相关问题
- 6-1
- 第五章T7
- 别被技术绑架
- 第五章T8
- 跨进程使用startActivity来调用Activity的一些注意事项
- 我的Java开发学习之旅------>Java String对象作为参数传递的问题解惑
- 论文笔记:Faster R-CNN:Towards Real-Time Object Detection with Region Proposal Networks
- 时间戳运用例子
- 玩命牛的成长记录(二十二)——新宠
- 6-3(1)
- Bayes Net toolbox 的使用实例
- 第五章T9
- php框架的学习
- 微软100题(89)atoi实现