美文网首页程序员地瓜哥的小屋
Java中的传递是值传递

Java中的传递是值传递

作者: CodingDGSun | 来源:发表于2021-07-07 17:11 被阅读0次

Java中的参数类型

  • 形式参数,即形参
  • 实际参数,即实参
public static void main(String[] args) {
        int i = 0;
        run(i);//变量 i 即实际参数
    }

public static void run(int a) {//变量 a 即形式参数
    System.out.println(a);
}

Java中的两种参数传递情况

  • 值传递:指在进行函数方法调用时,将实际参数复制一份到函数方法内,在函数方法内对参数进行的修改操作,将不会影响到实际参数,则称为【值传递】。
  • 引用传递:指在进行函数方法调用时,将实际参数的地址引用直接传递到函数方法内,在函数方法内对参数进行的修改,将影响到实际参数,则称为【引用传递】。

案例一:

public static void main(String[] args) {
        int i = 0;
        run(i);//变量 i 即实际参数
        System.out.println(i);//结果是:0
    }

public static void run(int a) {//变量 a 即形式参数
    a = 10;
    System.out.println(a);//结果是:10
}

变量i,初始值是:0,以实际参数传递给方法run后,在方法体内对变量进行了修改,最终再次输出变量i,依旧是原值:0。即,符合第一种参数传递情况:【值传递】。

案例二:

public static void main(String[] args) {
        String msg = "hello world";
        run(msg);
        System.out.println(msg);//结果是:hello world
    }

public static void run(String str){
    str = new String("haha");//效果等同于:str = "haha";
    System.out.println(str);//结果是:haha
}

变量msg,初始值是:hello world,以实际参数传递给方法run后,在方法体内对变量进行了修改,最终再次输出变量msg,依旧是原值:hello world。即,符合第一种参数传递情况:【值传递】。

案例三:

public static void main(String[] args) {
        Student stu = new Student("张三", 7);
        System.out.println(stu);//此案例输出结果:com.study.demo13.ArgsTest$Student@23fc625e
        run(stu);
        System.out.println(stu);//此案例输出结果:com.study.demo13.ArgsTest$Student@23fc625e
    }

public static void run(Student student) {
    student = new Student();
    student.setName("王五");
    student.setAge(12);
    System.out.println(student);//此案例输出结果:com.study.demo13.ArgsTest$Student@3f99bd52
}

static class Student {
    public String name;
    private int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

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

对象stu,以实际参数传递给方法run后,在方法体内对对象进行了修改,最终再次输出对象stu,依旧是原对象的引用地址。即,符合第一种参数传递情况:【值传递】。


总结:
Java中的参数传递是值传递。

判断实参内容是否发生变化,判断依据是,主要看参数传递的是什么,如果参数传递的是引用地址,则查看执行方法函数,实参前后的地址是否发生变化。

案例三中,实参对象前后的引用地址没有变化,则传递的参数是值传递。

相关文章

  • Java 参数的传递

    Java 的参数是值传递,不是引用传递 Java 中只有值传递,方法按值调用(call by value)。也就是...

  • Java 与值传递

    问: 什么是值传递?什么是引用传递?为什么说 Java 中只有值传递? 一、值传递与引用传递 实参与形参: 实际参...

  • 聊聊Java内部类

    一.磨叽磨叽Java值传递与引用传递 “在Java里面参数传递都是按值传递”即:按值传递是传递的值的拷贝,按引用传...

  • java中的参数传递(只有值传递没有引用传递)

    Java中只有传值调用(值传递),没有传址调用(址传递或者引用传递)。所以在java方法中改变参数的值是不会改变原...

  • 解决java中的参数传递问题

    Java中只有传值调用(值传递),没有传址调用(址传递或者引用传递)。所以在java方法中改变参数的值是不会改变原...

  • [译] Java 值传递 VS 引用传递

    Java是值传递还是引用传递一直都有争论,我们最终下个结论,Java是值传递而不是引用传递。如果Java是引用传递...

  • Java中的传递是值传递

    Java中的参数类型 形式参数,即形参 实际参数,即实参 Java中的两种参数传递情况 值传递:指在进行函数方法调...

  • 谈谈Java的方法参数传递机制

    值传递# Java的方法参数传递是值传递!是值传递!值传递!!!重要的事情说三遍。什么是值传递?一个很简单的例子:...

  • java--参数传递问题

    【前方注意】:java中只存在值传递,值传递,值传递!!! 一、值传递(一切传引用其实本质上是传值) 总所周知,j...

  • JAVA是按值传递还是按引用传递

    java中对象作为参数传递给一个方法,到底是值传递,还是引用传递? String和int参数传递是按值传递还是引用...

网友评论

    本文标题:Java中的传递是值传递

    本文链接:https://www.haomeiwen.com/subject/bbxaultx.html