这题不会!别说你懂值传递与引用传递

阅读原文:这题不会!别说你懂值传递与引用传递java

即便工做过一阶段的人也不必定可以理解Java是值传递仍是引用传递。若不信,那么来看看下面这道题。数组

题目

请先写出你的答案,而后对比下输出结果。bash

public class Test {
    private String str = new String("码上实战");
    private char[] chars = {'星', '期', '一'};
    private int num = 2019;


    private void change(String cStr, char[] cChars, int cNum) {
        cStr = "欢迎关注->码上实战";   //第一步
        cChars[2] = '二';             //第二步
        cNum = 2020;        //第三步
    }

    public static void main(String[] args) {
        Test test = new Test();
        test.change(test.str, test.chars, test.num);

        System.out.println("str=" + test.str);
        System.out.println("chars=" + test.chars[0] + "," + test.chars[1] + "," + test.chars[2]);
        System.out.println("num=" + test.num);
    }
}
复制代码
  • 输出结果
str=码上实战
chars=星,期,二
num=2019
复制代码

值传递仍是引用传递?

首先,明确的告诉你们,Java只有值传递,没有引用传递!不管理解不理解,先记住这点。函数

概念

  • 值传递 方法调用时,实参的数值被复制到另外一个变量,而后传递复制的副本。spa

  • 引用传递 方法调用时,实际参数的地址直接传递到方法中。code

  • 对比orm

- 值传递 引用传递
区别 建立副本 不建立副本
改变 函数中没法改变实际参数 函数中能够改变原始实际参数
  • 注意
    这下你看清了吧,值传递和引用传递的真正区别是:传递时,实际参数是否复制了副本! 不要去管参数是基本类型仍是引用类型。

解题

值传递解题

  • 为何char数组中改变了? 由于 实参和形参指向的是同一个数组对象,方法中改变的不是参数自己,而是改变了它所指向的对象。cdn

  • 错误的区分基本类型和引用类型 由题可知,不管是String仍是int,即便在方法中都进行改变,但实参都没有改变,因此和参数什么类型没有关系。对象

若是你有什么问题,欢迎留言交流。token

相关文章
相关标签/搜索