深入理解Java的参数传递方式

初学者在学习Java的时候经常会混淆这个概念,但是学C语言的时候却不会混淆这个概念,因为C语言中有一个特殊的东西:指针,进而就会产生疑问:Java是通过什么方式进行参数传递的?

常见的传递方式是两种:按值传递和按引用传递

而Java总是采用按值传递,获得的是参数的拷贝【这句话总是容易引起歧义】具体要看两个角度:

  1. 在传递类型是基本类型:int,double时,方法定义的是局部变量,所以无法修改传入参数的值,只能以返回值的方式修改参数。

    private int increase(int x){
    	x =x+1;
        ruturn x;
    }
    private void test(){
        int x = 1;
        this.increase(x); 
        //x 为1
        x = this.increase(x);
        //x 为2
    }
    
  2. 在传递的参数为对象类型,如Student 的实例s1,传入时在方法中修改对象却可以修改数值,这因为在传入的参数中,传入的是对象的引用,这里并不是说拷贝创建了一个新的对象,而是将对象的引用赋值给了局部变量,所以操作的还是原对象:

    public void increase(Student s1){
        int temp = s1.getX();
        temp++;
        s1.setX(temp);
    }
    //x = 2
    

    这段代码在C++中其实应是传入一个对象的引用指针

    public void increase(Student& s1)
    

这里回到主题,Student student 这里的student不是对象,只是一个变量,只有当student 变量真正引用到一个student类型的对象时,它才能代表这个对象,这样就能理解空指针异常。

本篇关键词:按值传递

你可能感兴趣的:(JAVA,java,开发语言,参数传递)