A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 夏儒日 中级黑马   /  2012-7-19 13:47  /  1237 人查看  /  0 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

       从书上看到的关于函数的参数传递应用时几个需要注意的地方,自己看的时候有点模模糊糊,理解不是很透彻,也很容易不注意,现在拿出来跟大家分享下,希望能在你学习过程中帮助到你,同时也希望大家有补充的地方提出来,大家共同探讨共同进步。
        1、基本数据类型的参数传递:
          public class PassValue
               {
        public static void main(String[] args)
        {
                int x = 5;
                change(x);
                System.out.println(x);
        }
        public static void change(int x)
        {
                x = 3;
        }
            }
            该程序change函数从开始到结束的过程中都没有改变main函数中x的值,所以打印结果为5.可见,基本类型的变量作为实参传递,并不能改变主程序中同名局部变量的值。
        
        2、引用数据类型的参数传递
          将上面1中程序改为:
public class PassRef {

        int x;
        public static void main(String[] args) {

                PassRef obj = new PassRef();
                obj.x = 5;
                change(obj);
                System.out.println(obj.x);
        }
        public static void change(PassRef obj){
                obj.x = 3;
        }
}
       改后的程序的打印结果为3.这是为什么呢?这是因为引用类型数据传递的是对象的引用,而非对象本身,通过方法调用,可以改变对象的内容,但是对象的引用是不能改变的。对于数组,也属于引用类型,将数组对象作为参数传递,和上面2中的例子有同样的效果。如以下程序:
class PassRef2
{
        public static void main(String[] args)
        {
                int[] x = new int[1];
                x[0] = 5;
                change(x);
                System.out.println(x[0]);
        }
        public static void change(int[] x)
        {
                x[0] = 3;
        }
}
        改程序的打印结果为3。但是将上面传递对象引用的程序改下面的程序后,则打印结果为5,这是为什么呢?因为改后的change方法的调用对程序的功能没有起到任何作用,故x[0]的值也就没改变。
class PassRef3
{
        int x;
        public static void main(String[] args)
        {
                PassRef3 obj = new PassRef3();
                obj.x = 5;
                change(obj);
                System.out.println(obj.x);
        }
        public static void change(PassRef3 obj)
        {
                obj = new PassRef3();
                obj.x = 3;
        }
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马