java参数传递问题,值传递还是引用?

这个问题我在多次编写例题代码的时候有过困惑,思考之后发现找到了很好的理解。

我这里就不说书上的定义了,以下的代码可以说明基本问题

class A{    int aa;        A(){aa=10;}        }
public class test{
    static void charchange(int b){    b++;    }   //形参是基本类型
    static void strchange(String nstr){        nstr="world";    }//形参是String

    static void classchange(A a){    a.aa*=2;    }//形参是类
    static void classnew(A d){    d=new A(); d.aa*=2;    }//形参是类,但内部实现方法特别

    public static void main(String[] args) {
        int i=0;
        charchange(i);
        System.out.println(i);//上一行函数的作用和下面的三行代码没区别

        int b=i;
        b++;
        System.out.println(i+"\n\n");


        String str="hello";
        strchange(str);
        System.out.println(str);//上一行函数的作用和下面的三行代码没区别

        String nstr=str;
        nstr="world";
        System.out.println(str+"\n\n");


        A a=new A();
        classchange(a);
        System.out.println(a.aa);//上一行函数的作用和下面的三行代码没区别
        a.aa=10;

        A c=a;
        c.aa*=2;
        System.out.println(a.aa+"\n\n");


        a.aa=10;
        classnew(a);
        System.out.println(a.aa);//上一行函数的作用和下面的三行代码没区别

        A d=new A();
        d.aa*=2;
        System.out.println(a.aa);
    }
}

也就是说:

基本数据类型或者String(本质是类)可以理解为值传递[可以查看String类的构造函数一探究竟],而对于对象:

A a=new A();这个操作以后有了一个类的内存空间,通过引用a可以找到该内存空间,

A b=a;的操作让b也成为一个引用,他的地位和a完全相等

如果再次b=new A();那么b就会变成另一个内存空间引用

 

猜你喜欢

转载自blog.csdn.net/qq_25929565/article/details/83690026