引用传递的内存分析

http://img.mukewang.com/57eb0ecb0001ff3707710548.jpg

结果不应该是hello 和jike吗 ?  为什么是两个hello,老师讲解为String类型数据不可变,这个不明白,希望大神能解释一下  

http://img.mukewang.com/57eb0f2f0001f3e110020516.jpg

这个是老师的内存分析.我的问题在一下面的含参方法在使用的时候,不就是相当于运行

String temp ="jike";

这一行代码吗 ?   为什么不能改变  

水一方
浏览 1282回答 2
2回答

Caballarii

tell(str1)运行的时候,是把str1的地址作为参数传进去的,也就是"hello"的地址,这个地址在tell方法运行的时候是不会改变str1的地址的,如果是一般对象,是可以修改地址里的内容的,但是对于String对象来说,不可以修改地址内的内容,只能把地址重新指向新的字符串,所以在str1上不会起变化

大咪

String s = "ABCabc"; System.out.println("s = " + s); s = "123456"; System.out.println("s = " + s); 打印结果为: s = ABCabc s = 123456代码我给你举个例子就是上边的代码,然后我要说的是:s只是一个引用,它指向了一个具体的对象,当s=“123456”; 这句代码执行过之后,又创建了一个新的对象“123456”, 而引用s重新指向了这个心的对象,原来的对象“ABCabc”还在内存中存在,并没有改变。有木有比你的例子要简单理解呢。。。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java