java中的值传递

来源:互联网 发布:linux 删除路由 编辑:程序博客网 时间:2024/05/29 10:11

遇见一道与参数传递有关的题,然后一不小心就做错了,还是自己理解的不够到位。在这里记下,并说说自己的理解。希望能够提升自己帮助他人。望指出错误和不足之处。

首先看下题目,源码如下:

public class Example{String str = new String("good");char[] ch = {'a','b','c'};public static void main(String[] args){Example e = new Example();e.change(e.str,e.ch);System.out.print(e.str+" and ");System.out.print(e.ch);}public void change(String str,char[] ch){str = "bad";ch[0] ='g';}}

正确的输出结果为:good and gbc

过程分析:

首先,从上述代码中可以看到在类Example中定义了一个String类型的变量和一个char类型的数组并初始化;

然后,定义了一个方法change,并向change中传递了两个参数,一个是String类型一个是char型数组;

最后,在主函数中调用change这个方法,并将开始定义的两个变量传递给change方法。

结果分析:

因为String是被final修饰的类,所以String对象是不可改变的;e.change(e.str,e.ch)调用时,将e.str的被赋给了change方法中的形参str,e.ch将char数组的地址赋给了change方法中的形参ch。change方法被调用时,str = "bad"改变的是方法中形参的值,对实参没影响;而ch[0] ='g'由于是直接改变ch所指向地址的值,所以实参也发生改变。

总结:

1、如果是基本数据类型(int,double,char),则传递的是值本身;

2、如果是引用数据类型(array,class),传递独的是地址值。
1 0
原创粉丝点击