对于Java中函数参数传递的理解

前言:
最近在做一个Android的项目,由于之前的项目是使用C++进行开发的,并未对Java进行过系统的学习,因此在项目过程中对Java的编码过程中出现了大量的模糊状态。其中就有遇到Java中参数传递的问题。

大家都知道在C++中函数的参数传递有值传递和引用传递的分别,其具体的方式通过参数的类型一看即知,但是在Java中由于取消了指针和引用,故而无法从参数类型看出是值传递的还是引用传递。因此做了如下的测试:

public class Parampass {

    class Int
    {
        public int miData = 0;
    }

    public void Sub(int i)
    {
        i++;
        System.out.println("Sub(int i) : " + i);
        System.out.println(i);
    }

    public void Sub(Int objI)
    {
        objI.miData++;
        System.out.println("Sub(Int i) : " + objI.miData);
        System.out.println(objI);
    }

    public void ParamPassTest()
    {
        int i = 0;
        Int objI = new Int();

        Sub(i);
        Sub(objI);

        System.out.println("i:" + i);
        System.out.println("objI:" + objI.miData);
        System.out.println(i);
        System.out.println(objI);
    }
}

public class UT_Java {

    public static void main(String[] args)
    {
        Parampass pp = new Parampass();
        pp.ParamPassTest();
    }
}

其运行输出的结果如下:

Sub(int i) : 1
1
Sub(Int i) : 1
com.Jincy.Packet3.Parampass$Int@19e0bfd
i:0
objI:1
0
com.Jincy.Packet3.Parampass$Int@19e0bfd

通过结果我们可以看出:
现象1,通过32行和33行的输出,发现变量i并未因为调用了Sub而改变,但是变量objI中的值却出现了改变。这点和C++中的引用传递确实非常相似。
现象2,通过21行和35行的输出,Sub(Int)中输出objI和Parampass函数中输出objI是同一个。
通过上述1和2,再联想到==和equals的区别,个人觉得,在函数参数传递过程中其实传递的都是值,只是当参数为基本类型时传递的是该基本类型的实际值,但是当参数为非基本类型则传递是该对象的地址。其函数内部操作的是同一块内存区域。因而会出现现象1.

by Java小菜鸟,请大家多多指正。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值