public class Test
{    static void te(int s)
    {
s = 456
    }    public static void main(String[] args)
    {
int a = 123;
te(a);
System.out.print(a);
    }
}
输出:123public class Test
{    static void te(int []s)
    {
for(int i = 0;i<s.length;i++)
{
    s[i]=i;
}
    }    public static void main(String[] args)
    {
int a[] ={4,5,6};
te(a);
for(int i = 0;i<a.length;i++)
{
    System.out.print(a[i]+" ");
}

    }
}
输出 0  1  2 都是传入参数,为什么一个内容发生改变,另一个不会

解决方案 »

  1.   

    一个是值传递 一个是引用传递。
    Java并不像C C++ C#那样可以显示的指定是否为值传递或者引用传递
    在Java中,基本数据(int double,不包括数据)类型都为值传递;包装类型为引用传递。
      

  2.   

    这种基础问题看下书吧。。前面的有一块内存区,名子叫:a 它的值是:123  运算的时候,拷贝了另外一份名为:s的内存区,值也为123下面。  有一个a的内存区,他里面存放了一个地址    这个地址就是你所指向的那个数组,即{4,5,6}那个数组的内存块地址。。  运算的时候,你将 a的值,赋给了s,即s也指向了{4,5,6} 这时你对s进行操作,他改了{4,5,6}那个数组的里面内容   像这种问题,随便找一份本上都会讲的,静下心来多看看书。。别神马问题都来等别人给你解答,这样你永远入不了门