因为你在 deleteRepeats方法中 charArr=str.toCharArray();这一步进行的时候,他根本不是在原有数组上进行修改,而是将方法内的局部变量charArr指向了一个数组,这个数组是toCharArray()生成的。而原有的数组自然是不变。
误区1.你以为charArr是一个对象,其实charArr只是一个引用。charArr=str.toCharArray();改变的是引用,没有改变引用指向的对象。
=运算符,只改变了引用,没有改变任何对象,原数组没有改变,新数组也不是=运算符生成的。
误区2.你以为方法内的charArr和main中的charArr是一个引用,其实他们是两个引用只不过,一开始指向一个数组,charArr=str.toCharArray();执行过之后,改变了deleteRepeats方法charArr引用。 使其指向了一个新数组。
比如说main中的charArr存储在0x123456地址上 那么内存结构 在栈上存放0x123456 是在堆位置为0x123456处存放他的数据 那么相当于指针(其实也就是指针)
你在调用deleteRepeats 的时候向deleteRepeats 传递的是0x123456 也就是对象的引用地址
调用用相当于两个指针指向同一块内存 你最后修改的是deleteRepeats 内charArr指向的地址 所以main内的charArr不会发生改变.