zoukankan      html  css  js  c++  java
  • Java是值传递还是引用传递

    1.  我们知道在程序设计语言中,将参数传递分为按值调用和按引用调用。

       按值调用:表示方法接收的是调用者提供的值。而按引用调用表示方法接收的是调用者提供的变量地址。
       一个方法可以修改传递引用所对应的变量值,而不能修改传递值调用所对应的变量值。

       我们在c++中知道判断最好的方法就是写一个swap函数,根据结果看就能判断是按值调用还是按引用调用。

    class Student {
        private float score;
    }
    
    public class ParamTest {
        public static void main(String[] args) {
            Student x = new Student(0);
            Student y = new Student(100);
    
            System.out.println("交换前:");
            System.out.println("x的分数:" + x.getScore() + "--- y的分数:" + y.getScore());
    
            swap(x, y);
    
            System.out.println("交换后:");
            System.out.println("x的分数:" + x.getScore() + "--- y的分数:" + y.getScore());
        }
    
        public static void swap(Student a, Student b) {
            Student temp = a;
            a= b;
            b= temp;
        }
    }

       运行结果:

    交换前:
    a的分数:0.0--- b的分数:100.0
    交换后:
    a的分数:0.0--- b的分数:100.0

       可以看出,两者并没有实现交换。从这个过程中可以看出,Java对对象采用的不是引用调用,实际上,对象引用进行的是值传递。

    2.  要想实现数值变换,我们可以写函数来实现:

    class Student {
    
        private float score;
    
        public Student(float score) {
            this.score = score;
        }
    
        public void setScore(float score) {
            this.score = score;
        }
    
        public float getScore() {
            return score;
        }
    
    
    }
    
    public class ParamTest {
        public static void main(String[] args) {
            Student stu = new Student(80);
            raiseScore(stu);
            System.out.print(stu.getScore());
        }
    
        public static void raiseScore(Student s) {
            s.setScore(s.getScore() + 10);
        }
    }

    3.  总结一下Java总是采用按值调用。方法得到的是所有参数值的一个拷贝,特别的,方法不能修改传递给它的任何参数变量的内容。方法参数共有两种类型:基本数据类型和对象引用

  • 相关阅读:
    洛谷-P5709 【深基2.习6】Apples Prologue
    右键添加功能
    配置Java环境变量遇到的坑
    mysql安装
    页面置换算法
    程序员画图软件
    Java中传值和传引用
    计算机网络之链路层
    Python开发【第十五篇】模块的导入
    Python开发【第十四篇】装饰器
  • 原文地址:https://www.cnblogs.com/jkzr/p/10728434.html
Copyright © 2011-2022 走看看