Java 为什么字符数组名无法作为引用来传递?

2025-04-09 00:25:42
推荐回答(2个)
回答1:

因为你在 deleteRepeats方法中 charArr=str.toCharArray();这一步进行的时候,他根本不是在原有数组上进行修改,而是将方法内的局部变量charArr指向了一个数组,这个数组是toCharArray()生成的。而原有的数组自然是不变。

误区1.你以为charArr是一个对象,其实charArr只是一个引用。charArr=str.toCharArray();改变的是引用,没有改变引用指向的对象。
=运算符,只改变了引用,没有改变任何对象,原数组没有改变,新数组也不是=运算符生成的。

误区2.你以为方法内的charArr和main中的charArr是一个引用,其实他们是两个引用只不过,一开始指向一个数组,charArr=str.toCharArray();执行过之后,改变了deleteRepeats方法charArr引用。 使其指向了一个新数组。

回答2:

比如说main中的charArr存储在0x123456地址上 那么内存结构 在栈上存放0x123456 是在堆位置为0x123456处存放他的数据 那么相当于指针(其实也就是指针)
你在调用deleteRepeats 的时候向deleteRepeats 传递的是0x123456 也就是对象的引用地址
调用用相当于两个指针指向同一块内存 你最后修改的是deleteRepeats 内charArr指向的地址 所以main内的charArr不会发生改变.