随笔 - 64  文章 - 2  评论 - 84  阅读 - 19万

JAVA基本数据类型、引用数据类型-参数传递详解

1:基本类型的参数传值

对于基本数据类型,修改这个值并不会影响作为参数传进来的那个变量,因为你修改的是方法的局部变量,是一个副本。实参的精度级别应等于或低于形参的精度级别,否则报错。

复制代码
class JB{
    void f(int x, int y){
        x=x+1;
        y=y+1;
        System.out.printf("参数x和y的值分别是:%d, %d\n", x, y);
    }
}
public class CS {
    public static void main(String[] arg){
        int x=10;
        int y=12;
        JB jb=new JB();
        jb.f(x, y);  
        System.out.printf("main方法中x和y的值分别是:%d, %d\n", x, y);
    }
}
复制代码
结果:
参数x和y的值分别是:11, 13 main方法中x和y的值分别是:10, 12

2:引用类型的参数传值

引用类型包括类、数组以及后面将要学习的接口。当形参是引用类型时,实参传给形参的值是对象的引用。如果修改形参引用的对象,那么实参引用的对象也会发生同样的变化。因为实参的引用拷贝给了形参,所以实参和形参引用同一个对象,对形参引用对象的修改就相当于对实参引用对象的修改。

如果修改的不是形参引用的对象而是形参值本身,也就是让形参指向其它对象,则实参值和实参引用的对象都不改变。

复制代码
class A{
    int N;
    A(int n){
        N = n;
    }
    void setN(int n){
        N = n;
    }
    int getN(){
        return N;
    }
}
class A2 extends A{

    A2(int n) {
        super(n);
    }
}
class B{
    void f(A a){
        a.setN(12);
//        a = new A2(111);
        System.out.println("在执行方法f时, 形参a修改了自己的N值");
        System.out.println("当前形参mouse的N值: " + a.getN());
    }
}

main


B b = new B();
        A a = new A(2);
        System.out.println("在调用方法f之前,实参a的N值: "+ a.getN());
        b.f(a);
        System.out.println("在调用方法f之后, 实参a的N值: " + a.getN());
复制代码
结果:

在调用方法f之前,实参a的N值: 2
在执行方法f时, 形参a修改了自己的N值
当前形参a的N值: 12
在调用方法f之后, 实参a的N值: 12

注意:形参指向其它对象这句话的理解,a = new A2(111);让mouse又指向了另一个对象,所以他所修改后的值和实参没有关系,实参的值和引用都不会改变。在代码中新加入的A2就是继承了A,通过方法传入的是A(a)的对象的引用,把a = new A2(111);那么之后改变是A2的内容,和A就无关了,所以A(实参)的引用对象和值都不变。

结果:

在执行方法f时, 形参a修改了自己的N值
当前形参a的N值: 111
在调用方法f之后, 实参a的N值: 2

 

posted on   TMusketeer  阅读(5031)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示