问题描述
解决方案
形参一般是不改变实参的值的,除非申明为引用,比如你传个int a进去,子函数内部相当于另外新建了一个int型变量b,然后使得b=a,之后的操作都是对于b而言的,a的值不会改变。但是如果你传的是的地址,你可以在子函数里改变这个地址所指向的对象的值。
像数组的传递,基本上就是把数组的首地址传递过去,所以在子函数对这个形参数组的操作会改变主函数里实参数组的值,因为它们指向的是同一个地址
可能说的有点乱,见谅~
如果有说错的地方还请其他大神指正~
解决方案二:
你可以试下把 change 函数中的 str = "test ok" 改为 this.str="test ok" 这样就好使了
原因是:
ex.str 是 一个引用 实际指向的 内存中的一个字符串对象, 通过change函数将它传递给 str 后, str = ex.str 实际上是str是另外一个引用
str它指向的对象和ex.str指向的对象相同
但是 如果你让 str="test ok" ,那 str实际指向的就是另外一个字符串对象了,而 ex.str 没变过。。
解决方案三:
String str1=new String("good"); String str2="abc";上面的情况可以这么理解吧。str1和str2的区别就在于,前者的str1在内存中有两个对象。后者的str2有一个对象。
前者的new的对象在堆内存中,类类型的对象s2在栈内存中。就像你说的str是类类型的对象,在栈内存中,指向的是堆内存中的那个。你方法中的赋值并没有改变具体的String值。事实上也是,字符串一旦被初始化,就不会被改变。
时间: 2024-11-03 22:19:44