public class Test 

String str = new String("good"); 
char ch[] ={'a','b','c'}; 
int a = 3; public void change(String str,char[] ch,int a) 

str = "test_ok"; 
ch[0] = 'g'; 
a = 88; 

public static void main(String args[]) 

Test t = new Test(); 
System.out.println(t.ch); 
t.change(t.str,t.ch,t.a); 
System.out.println(t.str); 
System.out.println(t.ch); 
System.out.println(t.a); 


~~这段程序运行结果我不太明白,String类型可以理解,就是不懂int型和数组型.

解决方案 »

  1.   

    int是按值传递,传的是a的一个副本,相当于在传递时会复制一个a,方法中的a和类中的a不是同一个变量,数组是把数组首地址传递进去.
      

  2.   

    顺便说一下,String也是传递的引用的一个副本,在方法里只是用引用的副本指向另一个对象,而本来的引用没有变.java中所有的参数都是按值传递的,如果是基本数据类型是传递的变量的副本,其它不是基本类型的都是传递引用的副本.
      

  3.   

    这里应该原值都没有改变,楼上说java中所有的参数都是按值传递的,这只是一种理解方式,
    在java中值类型传的是副本,引用类型传的是引用的副本,但是string是一个特殊的对象,
    方法里面和外面的两个引用都指象同一个对象,里面变外面应该跟着边,这是因为string是一个不可以变的对象,里面在从新赋值的时候已经创建了另外一个string对象,引用已经指向新的对象。所以外面的值不会变,如果你自己定义个对象,这样传递值肯定会有一致的变化!
      

  4.   

    同义楼上的,顺便说一下,java中传递对象的情况还是比较多的,实际传递的都是对象的引用,这样可以保持函数内外的一致。
      

  5.   

    但是事实并不是如此,我也知道java里参数传值基本都是值传递,而不是址传递
    把代码里的change方法形参改一下或许好理解点
    public void change(String a,char[] b,int c)
    {
       a="test_ok";
       b[0]='g';
       c=88;
    }但是最后输出结果中数组ch被改变了,有人能解释一下吗?
      

  6.   

    没看仔细,传数组进来,里外的值会一致,数组应该当作对象来看!
    他传过来的是引用,和外面指向同一个数,所以会跟着变化!
    楼上还有个说错了。 并不是所有的都是按值来传递,
    2楼所说的java中所有的参数都是按值传递的,这只是一种理解方式, 
    值类型传的是值的副本,引用类型传的是引用的副本,也就是地址的副本,所有他还是传地址,
    只不过是值的形式传过来的!
      

  7.   

    java中的对象都是传引用,值类型才传值! 数组按对象来看待,他里面其实存储的其实就是多个引用!
      

  8.   

    只有ch改变了值。因为change方法里面指向ch并修改了ch的值。