这两种方式,好像都是对数组gg进行操作,但是为什么最后输出的数组ss会不一样?
import org.junit.Test; public class CharArray { @Test public void test01() { char[] ss = {'a','b','c','d','e','f','g','h'}; char[] gg = ss; for (int i = 0,j = ss.length-1; i < ss.length; i++,j--) gg[i] = ss[j]; for (int i = 0; i < gg.length; i++) System.out.print(ss[i] + " "); } @Test public void test02() { char[] ss = {'a','b','c','d','e','f','g','h'}; char[] gg = {'a','b','c','d','e','f','g','h'}; for (int i = 0,j = ss.length-1; i < ss.length; i++,j--) gg[i] = ss[j]; for (int i = 0; i < gg.length; i++) System.out.print(ss[i] + " "); } }
test01的结果是:h g f e e f g h
test02的结果是:a b c d e f g h
年轻人,虽然我已经多年没干Java了,但是深度复制要不要了解一下?
你的在test1中,将ss赋给了gg,无论是在java,C#,js,php等(为什么就说这几个?因为我就这四个最熟啊)语言里,都复制的都不是对象本身,而是复制的对象在内存的地址,虽然你用了gg和ss两个变量,但是两个变量引用的是同一个东西。
而你在test2中,重新给gg建立的数组,这样就会在内存里存在两个,你觉得一摸一样的对象,但是两个变量引用的却不是同一个地址。
你可以做一个实验,在两个方法中定义完两个变量,然后输出gg==ss(原谅我忘了java的控制台输出怎么写了),test1中应该是true,test2中应该是false
试了一下,是那个结果,谢谢。
本人学生,看来平时学习基础还是要注重 -_-,hh~
再次感谢~