Java中的参数传递

在我们讨论 “Java中参数传递的类型” 这个问题之前,我们首先需要对参数传递的类型做一些了解。


 

众所周知,Java语言的许多概念是传承自C++的,因此我们需要先对C++的参数传递类型做一些了解。C++中参数的传递有三种,分别是:

1、传值

  具体操作:在调用函数/方法时,会创建形参列表中的相应对象,并将实参的各项值,复制给新创建的形参。       

  下面贴一段代码,并进行分析: 

#include <iostream>
using namespace std;

//成绩类:内含语、数、英 三科成绩
class Score{
public:
    double chinese;
    double math;
    double english;
    //构造方法
    Score(){}
    Score(double chinese,double math,double english){
        this->chinese = chinese;
        this->math = math;
        this->english = english;
    }
};

//学生类:内含年龄、成绩
class Student{
public:
    //构造函数
    Student(int age,Score score){
        this->age = age;
        this->score = score;
    }
    void setAge(int age){
        this->age = age;
    }
    void setScore(Score score){
        this->score = score;
    }
    //信息概览
    void show(){
        cout<<"该生今年"<<age<<"岁,语数英三科分别为"<<score.chinese<<" - "<<score.math<<" - "<<score.english<<endl;
    }
private:
    int age;
    Score score;
};

void changeStudent(Student student){
    student.setAge(99);
}

int main()
{
    //创建一个学生
    Score score(88,90,95);
    Student student(17,score);
  //展示学生信息
    student.show();

  //调用修改函数
    changeStudent(student);

  //再次展示学生信息
    student.show();

    return 0;
}

 从执行结果可以看到,两次show()展示的信息是一样的。            这是因为在调用changeStudent()函数时,传的是值          changeStudent()函数会新创建一个形参对象,然后把实参的各个属性拷贝到形参中。

(如果在changeStudent函数的头部和底部分别调用student.show方法,就会发现函数内的student的值确实修改了,不过这个student是changeStudent函数临时创建的,与主函数中的student除了值相同,没有一分钱的关系,他们的地址并不相同 —— 换言之,他们并不是一个对象     这个临时创建的student会在函数执行完后,自动销毁)

 

2、传指针

  具体操作:在调用函数/方法时,会创建一个形参指针,并将实参指针的地址,拷贝给实参指针。                   (看描述就可以看出来,传指针其实就是传值)

#include <iostream>
using namespace std;

//成绩类:内含语、数、英 三科成绩
class Score{
public:
    double chinese;
    double math;
    double english;
    //构造方法
    Score(){}
    Score(double chinese,double math,double english){
        this->chinese = chinese;
        this->math = math;
        this->english = english;
    }
};

//学生类:内含年龄、成绩
class Student{
public:
    //构造函数
    Student(int age,Score score){
        this->age = age;
        this->score = score;
    }
    void setAge(int age){
        this->age = age;
    }
    void setScore(Score score){
        this->score = score;
    }
    //信息概览
    void show(){
        cout<<"该生今年"<<age<<"岁,语数英三科分别为"<<score.chinese<<" - "<<score.math<<" - "<<score.english<<endl;
    }
private:
    int age;
    Score score;
};

void changeStudent(Student *pStudent){
    pStudent->setAge(99);
}

int main()
{
    //创建一个学生
    Score score(88,90,95);
    Student student(17,score);
    //创建一个指针
  Student *pStudent = &student;   //展示学生信息 student.show();   //调用修改函数 changeStudent(pStudent);   //再次展示学生信息 student.show(); return 0; }

 

  

3、传引用

 

 

首先,比较确定的点就是

上一篇:python判断一个日期对应的节假日名


下一篇:腾讯面试题:python 实现将字典dict、列表list中的中文正常显示方法