美文网首页
Java 参数的传递

Java 参数的传递

作者: 孤独的人睡不着 | 来源:发表于2018-10-24 20:17 被阅读0次

Java 的参数是值传递,不是引用传递

Java 中只有值传递,方法按值调用(call by value)。也就是说,方法得到的是所有参数值的一个拷贝,对拷贝的修改不会影响到参数值本身。基本数据类型参数引用存储的就是值本身,容易引起误解的是对象数据类型参数,通过下面两段代码示例做出说明。

基本数据类型参数

public static void main(String[] args) {
    int num1 = 10;
    int num2 = 20;

    swap(num1, num2);

    System.out.println("num1 = " + num1);  
    System.out.println("num2 = " + num2);   
}

public static void swap(int a, int b) {
      //  参数 a、b 分别是 num1 、 num2 的拷贝
      //  下面对拷贝的操作不会影响到原值
    int temp = a;
    a = b;
    b = temp;
    System.out.println("a = " + a); // 输出:a = 20
    System.out.println("b = " + b); // 输出:a = 20
}
// 结果
a = 20
b = 10
num1 = 10
num2 = 20

对象数据类型参数

public static void main(String[] args) {
        Employee a = new Employee("小明");
        System.out.println(“a=” + a.getName());  // 输出:a=小明
        print(a);
        System.out.println(“a=” + a.getName());  // 输出:a=大明
        set(a);
        System.out.println(“a=” + a.getName());  // 输出:a=大明
}

private void print(Employee copy){
        // copy 是虚拟机栈中 a 引用的一个拷贝
        // 和 a 引用指向同一个堆内存中的实例对象
        System.out.println("copy=" + copy.getName()); // 输出:copy=小明

        // 此时通过拷贝修改的是堆内存中的实例对象状态
        // 拷贝和参数引用仍然指向同一个实例对象
        copy.setName("大明");
        System.out.println("copy=" + copy.getName()); // 输出:copy=大明
}

private void set(Employee copy){
        // 这里 copy 重新指向了新的 Employee 实例对象
        // a 引用不受影响仍然指向原来的实例对象
        copy = new Employee("小刚");
        System.out.println("copy=" + copy.getName()); // 输出:copy=小刚
}

总结

  • 方法不能修改基本数据类型的参数
  • 方法不能修改对象类型的参数
  • 方法得到的实际是参数引用的一个拷贝,即传递的是引用的值(容易误解为引用传递)
  • 方法得到的参数引用拷贝和参数引用指向同一个堆内存中的实例对象
  • 方法通过参数引用的拷贝也可以修改实例对象的状态
  • 参数引用的拷贝可以重新指向堆内存中的一个新的实例对象,此时参数引用仍然指向原来的实例对象

相关文章

  • C语言 函数传参的理解

    C语言有点东西 不像JAVA 不需要复杂考虑参数传递问题 java就两种参数传递方式 值传递AND引用传递...

  • Java中的传递是值传递

    Java中的参数类型 形式参数,即形参 实际参数,即实参 Java中的两种参数传递情况 值传递:指在进行函数方法调...

  • Java 基础笔记

    一、Java中参数传递 Java中方法的参数传递实际上都是值传递,有别于C/C++;在使用对象传递时只能修改对象的...

  • java中方法的参数传递机制

    java中方法的参数传递机制

  • Practical Java: 一般技术

    实践1:参数以by value方式而非by reference方式传递 Java中的参数以by value方式传递...

  • Java 参数的传递

    Java 的参数是值传递,不是引用传递 Java 中只有值传递,方法按值调用(call by value)。也就是...

  • 命令行参数和可变参数

    命令行参数 String[] args 数组 通过执行 java 运行配置传递参数: java HelloWorl...

  • Java参数传递

    基本类型 基本类型作为参数传递时,传递的是值得拷贝。 在函数内做任何改变都不会影响原来的值。 对象 对象作为参数传...

  • Java 参数传递

    Java方法传参方式记住了两点。基本上不会犯错误。 方法内修改基础数据类型(数字类型或布尔类型)不会改变方法外的参...

  • Java参数传递

    c语言中,有指针传递,可以通过指针操作内存的数据,如交换变量的值可以这样 输出结果:6,56,5 但是Java中没...

网友评论

      本文标题:Java 参数的传递

      本文链接:https://www.haomeiwen.com/subject/iegxtqtx.html