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型和数组型.
{
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型和数组型.
在java中值类型传的是副本,引用类型传的是引用的副本,但是string是一个特殊的对象,
方法里面和外面的两个引用都指象同一个对象,里面变外面应该跟着边,这是因为string是一个不可以变的对象,里面在从新赋值的时候已经创建了另外一个string对象,引用已经指向新的对象。所以外面的值不会变,如果你自己定义个对象,这样传递值肯定会有一致的变化!
把代码里的change方法形参改一下或许好理解点
public void change(String a,char[] b,int c)
{
a="test_ok";
b[0]='g';
c=88;
}但是最后输出结果中数组ch被改变了,有人能解释一下吗?
他传过来的是引用,和外面指向同一个数,所以会跟着变化!
楼上还有个说错了。 并不是所有的都是按值来传递,
2楼所说的java中所有的参数都是按值传递的,这只是一种理解方式,
值类型传的是值的副本,引用类型传的是引用的副本,也就是地址的副本,所有他还是传地址,
只不过是值的形式传过来的!