如何理解java方法的传值和传引用的参数传递方式_指针参数传递

如何理解java方法的传值和传引用的参数传递方式_指针参数传递结论:1)当使用基本数据类型作为方法的形参时,在方法体中对形参的修改不会影响到实参的数值2)当使用引用数据类型作为方法的形参时,若在方法体中修改形参指向的数据内容,则会对实参变量的数值产生影响,因为形参变量和实参变量共享同一块堆区;3)当使用引用数据类型作为方法的形参时,若在方法体中修改形参变量的指向,此时不会对实参变量的数值产生影响,因此形参变量和实参变量分别指向不同的堆区例一:基本数据类型作为形参,运行结果不改变实参publicclassMain{publicstatic

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

结论:

1)当使用基本数据类型作为方法的形参时,在方法体中对形参的修改不会影响到实参的数值
2)当使用引用数据类型作为方法的形参时,若在方法体中 修改形参指向的数据内容,则会对实参变量的数值产生影响,因为形参变量和实参变量共享同一块堆区;
3)当使用引用数据类型作为方法的形参时,若在方法体中 修改形参变量的指向,此时不会对实参变量的数值产生影响,因此形参变量和实参变量分别指向不同的堆区

例一:基本数据类型作为形参,运行结果不改变实参

public class Main { 
   
    public static void main(String[] args) { 
   
        Person p = new Person();
        int n = 15; // n的值为15
        p.setAge(n); // 传入n的值
        System.out.println(p.getAge()); // 15
        n = 20; // n的值改为20
        System.out.println(p.getAge()); // 15
    }
}

class Person { 
   
    private int age;

    public int getAge() { 
   
        return this.age;
    }

    public void setAge(int age) { 
   
        this.age = age;
    }
}

例二:引用类型–修改形参指向的数据内容,运行结果改变实参指向的数值,不改变实参地址

public class Main { 
   
    public static void main(String[] args) { 
   
        Person p = new Person();
        String[] fullname = new String[] { 
    "Homer", "Simpson" };
        p.setName(fullname); // 传入fullname数组
        System.out.println(p.getName()); // "Homer Simpson"
        fullname[0] = "Bart"; // fullname数组的第一个元素修改为"Bart"
        System.out.println(p.getName()); // 是"Bart Simpson"
    }
}

class Person { 
   
    private String[] name;

    public String getName() { 
   
        return this.name[0] + " " + this.name[1];
    }

    public void setName(String[] name) { 
   
        this.name = name;
    }
}

例三:引用类型–修改形参的指向,运行结果,不改变实参的任何东西

public class Main {
    public static void main(String[] args) {
        Person p = new Person();
        String bob = "Bob";
        p.setName(bob); // 传入bob变量
        System.out.println(p.getName()); // "Bob"
        bob = "Alice"; // bob改名为Alice
        System.out.println(p.getName()); // "Bob"
    }
}

class Person {
    private String name;

    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/179161.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【翻译】.NET 5中的性能改进

    【翻译】.NET 5中的性能改进在.NETCore之前的版本中,其实已经在博客中介绍了在该版本中发现的重大性能改进。从.NETCore2.0到.NETCore2.1到.NETCore3.0的每一篇文章,发…

    2022年7月20日
    11
  • 树莓派容易坏吗_树莓派的使用

    树莓派容易坏吗_树莓派的使用清华下载地址下载地址下载地址xshell下载地址③树莓派插入TF卡后,等连接上手机就可查看IP地址2.远程登录①打开后选择新建②软件更新源③系统更新源④开始更新4.图形化显示界面为方便大家更直观的感受,可以下载一个图形化的显示桌面,这里推荐VNC(windows也自带了该功能,因为太卡了故不推荐,想用的可以试试:远程桌面连接)⭐有条件的可以直接连上显示屏使用①VNC的网盘连接,大家直接下载就行②打开树莓派的VNCServer(默认关闭)A.在

    2022年10月9日
    2
  • 数据结构之排序算法建议收藏

    排序(Sorting),特别是高效的排序一直是计算机工作学习和研究的重要课题之一,排序有内部排序和外部排序之分,若整个排序过程不需要访问外存便能完成,则称此类排序为内部排序,反之则为外部排序。本篇将对

    2021年12月19日
    55
  • Clover 引导器.配置助手[通俗易懂]

    Clover引导器.配置助手.Yosemite版块.更新贴Beta2.0为了让各位下载更方便本帖不设置回帖可见希望路过的朋友帮顶有需要的朋友顶个帖让更多后来者们看见提取码[编译PKG]py81[编译EFI+boot1h2]8ctu[编译ISO]zq9f首先向Clover开发人员致敬:Slice,withhelpofKabyl,

    2022年4月10日
    36
  • PHP move_uploaded_file() 函数

    PHP move_uploaded_file() 函数

    2021年9月25日
    41
  • 网络体系结构与网络协议

    网络体系结构与网络协议

    2021年9月15日
    41

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号