A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

在Java中值传递与引用传递一直是争议挺大的,一方说没有引用传递,一方说值传递传递实际值,而引用传递传递地址。下面我来以一种“进化”的方式说说我的理解。
假设一般的类型的传递称为是“初级”,String类型的传递是“中级”,而其它类型(都是类)的传递是“高级”,下面以一个几个例子来解释为何如此称呼。
例:
public  static void main(String [] asd){


        int a = 10;

        int b = a;

        a = 100;


        System.out.println(a,b);


}

输出的是100,10。
以原本的说法是跟着变量一起存储的是实际值,而后进行的是实际值的传递。
而以我的观点认为跟着变量一起存储的是地址,而后进行的是地址的传递,只是它是“初级”的,因此不具备一个变量的改变影响另一个变量。
例:
public static void main(String [] asd){

       String s = "a";

       String s1 = s;

       s = "b";

       System.out.println(s,s1);

}

输出的值是a,b
而原来的说法在这里的争议最大,因此有人说Java中没有引用传递。
而以我看来String类型是介于“初级”与“高级”的过渡期,称为“中级”,即进化还不完全,从输出值中可以看出它与“初级”的类似处,但String本身是一个类,但还没完全具备“高级”的功能,因此称为“中级”。
例:
public static void main(String [] asd){

       Student stu = new Student();

       stu.getName("张三");

       Student stu2 = stu1;

       stu.getName("李四");

       System.out.println(stu,stu2);
      
}
输出的值为李四,李四
我在此处的理解与原来的说法相同,传递的是地址,这是“高级”具备的功能,即一个变量的改变影响另一个变量。

3 个回复

正序浏览
为什么我去跑的时候的结果和你说的结果不一样
回复 使用道具 举报

对的!地址值也是值
回复 使用道具 举报
地址也是值得
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马