运维开发网

Java参数传递及值传递实现原理详解

运维开发网 https://www.qedev.com 2020-12-24 15:14 出处:网络 作者: 志不坚者智不达
java方法参数的传递有两种,值传递和引用传递。 1.按值传递: 参数类型是int,long等八大基本数据类型时,参数传递的过程是按值拷贝的过程

java方法参数的传递有两种,值传递和引用传递。

1.按值传递:

参数类型是int,long等八大基本数据类型时,参数传递的过程是按值拷贝的过程

如下代码

public static void main(String[] args) {
    int a = 5;
    fun(a);
    System.out.println(a);// 输出结果为5
  }
 
  private static void fun(int a) {
    a += 1;
  }

2.按引用传递

参数类型为引用类型,参数传递的过程采用拷贝引用的方式

public class Test {
 
  public static void main(String[] args) {
    A a = new A(5);
    fun(a);
    System.out.println(a.a);// 输出结果为6
  }
 
  private static void fun(A a) {
    a.a += 1;
  }
 
  static class A {
    public int a;
 
    public A(int a) {
      this.a = a;
    }
  }
}

再看下面这种情况:

public class Test {
  public static void main(String[] args) {
    Integer a = 5;
    fun(a);
    System.out.println(a);// 输出结果为5
  }
  private static void fun(Integer a) {
    a += 1;
  }
}

这里明明是引用传递,为什么没有改变对象的值呢?

这里其实使用了基本数据类型封装类的自动装箱功能。

Integer a = 5,编译后实际为Integer a = Integer.valueOf(5),查看Integer的源码,并没有改变原对象的值,只是将其引用指向了另一个对象。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

0

精彩评论

暂无评论...
验证码 换一张
取 消