Java笔试题学习之05(参数传递)

版权声明:欢迎转载,期待指正 https://blog.csdn.net/fighting_sxw/article/details/89785666
class Value{
    public int i=15;
}
public class Test05 {

    public static void main(String[] args) {
        Test05 t05=new Test05();
        t05.first();
    }

    public void first(){
        int i=5;
        Value v=new Value();
        second(v,i);
        v.i=25;

    }
    public void second(Value v,int i){
        i=0;
        v.i=20;
        Value val=new Value();
        v=val;
        System.out.println(v.i+" "+i);
    }
}

输出:15 0

分析:Java的参数传递:
通常认为Java参数传递的方式有两种:值传递和引用传递
也可以分为Java的参数传递方式只有一种:值传递

分析一下second方法
该方法中有两个参数,v和i,其中v是引用类型,i是基本类型

之所以说Java参数传递有两种方式,是因为普通类型传递的就是参数的值,而引用类型传递的是参数的引用
何谓引用,我个人把它粗浅的理解为 对象的数据在内存中的位置,所以引用类型传递的是对象的数据的位置信息,而不是数据本身,所以。可以说参数传递 有两种方式

之所以说Java参数传递只有一种方式:就是值传递,是因为引用类型存放的是对象数据的地址信息,所以地址信息也可以理解为一种值,所以也可以看成是值传递,传递的是地址值,所以,可以说参数传递只有一种方式,值传递

本题中

main方法中创建Test05对象,并调用first方法,
在first方法中有两个局部变量 int类型的 i ,i的值为5, Value类型的 v;调用second方法将v和i传递过去
根据上面的分析,i传递过去的就是5,v传递过去的是对象的地址

在second中,将i赋值为0,将对象v的成员变量i赋值为20
接着创建了val对象,val的成员变量i默认值为15
然后应对象val的引用赋值给v,此时v引用保存的对象地址就变成了val保存的对象地址
所以v.i 的结果就是val.i 即15 ,i的值为0

ps:从大佬的抖音直接搬运过来,抖音号:Todaystart,不妥之处,还望指正!

猜你喜欢

转载自blog.csdn.net/fighting_sxw/article/details/89785666