首页 新闻 会员 周边

关于字符数组

0
悬赏园豆:20 [已解决问题] 解决于 2018-05-15 10:50

这两种方式,好像都是对数组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 

枫过留香的主页 枫过留香 | 初学一级 | 园豆:160
提问于:2018-05-15 10:17
< >
分享
最佳答案
0

年轻人,虽然我已经多年没干Java了,但是深度复制要不要了解一下?

你的在test1中,将ss赋给了gg,无论是在java,C#,js,php等(为什么就说这几个?因为我就这四个最熟啊)语言里,都复制的都不是对象本身,而是复制的对象在内存的地址,虽然你用了gg和ss两个变量,但是两个变量引用的是同一个东西。

而你在test2中,重新给gg建立的数组,这样就会在内存里存在两个,你觉得一摸一样的对象,但是两个变量引用的却不是同一个地址。

 

你可以做一个实验,在两个方法中定义完两个变量,然后输出gg==ss(原谅我忘了java的控制台输出怎么写了),test1中应该是true,test2中应该是false

收获园豆:20
写代码的相声演员 | 小虾三级 |园豆:517 | 2018-05-15 10:44

试了一下,是那个结果,谢谢。

本人学生,看来平时学习基础还是要注重 -_-,hh~

再次感谢~

枫过留香 | 园豆:160 (初学一级) | 2018-05-15 10:50
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册