友来友网 发表于 2013-5-3 21:10:33

一个java的问题,求解惑

public class Arraytest
{
        public static void main( String[] args)
        {
                String[] str1 = new String;
                str1 = new String("tian");
                str1 = new String("kong");
                str1 = new String("nan");

                String[] str2 = new String;
                System.arraycopy( str1, 0, str2, 0, str1.length);               
               
                str2 = "fengyun";//这一行
                System.out.println(str1);
                System.out.println(str2);
        }
}

刚学java, 学到了数组
这个程序我是这样理解的, 见图




那么我觉得复制了之后str1和str2应该指向同一个位子nan那里呀,
为什么改变了 str2的值,str1的值没有变呢 ,帮忙解解惑,


wwwxinyu1990 发表于 2013-5-3 21:10:34


这样希望能看明白。

shenjie 发表于 2013-5-15 17:42:45

每次赋值都会生成一个一个新的对象

wwwxinyu1990 发表于 2013-6-20 13:50:52

public static void main(String[] args) {
                String[] str1 = new String;
      str1 = new String("tian");
      str1 = new String("kong");
      str1 = new String("nan");

      String[] str2 = new String;
      System.arraycopy( str1, 0, str2, 0, str1.length);               
      
      str2 = "fengyun";//这一行
      System.out.println(str1);
      System.out.println(str2);
///////////////////////////////////////////////////////////
      String[] str3 = new String;
      str1 = new String("tian");
      str1 = new String("kong");
      str1 = new String("nan");

      String[] str4 = new String;
      str4 = str3;               
      
      str4 = "fengyun";
      System.out.println(str3);
      System.out.println(str4);
        }
你比较这两段看看,这里面涉及到一个引用类型和值类型之间的操作。第一种操作,是把值分辨赋给数组二;而第二种则是将数组4指向数组3的地址,对3和4的值进行操作,实际上是对相同的数据在进行操作。

coko 发表于 2013-7-3 22:51:17

看看,学习学习

coko 发表于 2013-7-4 13:33:06

再学习学习,温故而知新

我挖 发表于 2013-7-4 19:35:02

再看看,温故而知新

Cocol 发表于 2013-7-4 21:46:42

看看看,学习学习
页: [1]
查看完整版本: 一个java的问题,求解惑