栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

关于java的参数传递机制

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

关于java的参数传递机制

关于java的参数传递机制。

先下定义,java的参数传递机制为值传递。但是为什么在方法中基本数据类型,和引用数据类型会产生两种不同的效果。看如下代码

public class ParamPass2 {
    public static void main(String[] args) {
        ParamPass2 p = new ParamPass2();

        User user = new User();
        user.setName("张三");
        user.setAge(18);

        System.out.println("pass方法调用前,user=" + user.toString());
        p.pass(user);
        System.out.println("pass方法调用后,user=" + user.toString());
    }

    public void pass(User user) {
        user.setName("李四");
        System.out.println("pass方法中,user = " + user.toString());
    }
}

此时在调用完pass方法之后,user的name值会发生变化。

再看如下代码

public class ParamPass1 {
    public static void main(String[] args) {
        ParamPass1 p = new ParamPass1();
        int i = 10;
        System.out.println("pass方法调用前,i的值为=" + i);
        p.pass(i);
        System.out.println("pass方法调用后,i的值为=" + i);
    }

    public void pass(int i) {
        i *= 3;
        System.out.println("pass方法中,i的值为=" + i);
    }
}

此时的i值却不会发生变化。
这是为什么?
我的理解是由于他们的存放的位置造成的。
局部变量i是基本数据类型,他的变量名和变量值存放在方法栈中(全局变量是存放在堆中的,因为new出来的对象是存在在堆中的。),当传入方法时,会把i值复制一份,所以它传入的是数值10,经过处理后,不会影响到i。
但是引用类型变量,引用是放在栈空间的,存放的内容为引用和地址值,实际的对象是存放在堆空间中的,地址指向堆中的对象,这时就会发现,它并没有将对象复制,而是将地址复制,所以拥有两个相同地址的引用操作实际对象时都会使对象发生改变。所以当引用数据类型作为参数传递的时候,传递的是将地址传到了方法中,这和基本数据类型其实是一样的。所以导致了引用数据类型会使对象发生变化,而基本数据类型的值则不会发生变化。

总结来说,基本数据类型是将基本数据类型的值传入到方法中,而引用类型数据是将地址值传入到了方法中,两个相同的地址,肯定指向的是同一个对象,所以都会影响堆中的对象,最终导致引用类型数据进入方法后发生了改变。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/678229.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号