theboyaply

学,就硬学!

  • Home
  • Archives
  • Java
  • Maven
  • Docker
  • Kubernetes
  • JavaScript
  • ES6
  • Vue
  • 踩坑记录
  • noted

  • 搜索
element ui vue wsimport webservice npm mysql redis node nginx nfs ftp es6 开发工具 vscode 前端 javascript springboot 常见问题 tomcat oracle jenkins maven k8s Linux gitlab docker java

java基础十(值传递)

发表于 2020-01-07 | 分类于 Java | 0 | 阅读次数 701

java中只有一种传参方式,值传递。即将实际参数值的副本(复制品)传入方法内,而参数本身不受影响。

值传递分为两种:基本数据类型传参和引用数据类型传参。为了更加形象的解释值传递,我们下面用“交换两个变量值”来说明。

基本数据类型传参:

public class ParamTransmit {

    public static void main(String[] args) {
        int i = 4;
        int j = 5;
        System.out.println("before: i = " + i + ", j = " + j);
        exchange(i, j);
        System.out.println("after: i = " + i + ", j = " + j);
    }

    public static void exchange(int m, int n) {
        int temp = m;
        m = n;
        n = temp;
    }

}

结果:
before: i = 4, j = 5
after: i = 4, j = 5

引用数据类型传参:

public class ParamTransmit {

    public static void main(String[] args) {
        DemoClazz demoClazz = new DemoClazz();
        demoClazz.i = 4;
        demoClazz.j = 5;
        System.out.println("before: i = " + demoClazz.i + ", j = " + demoClazz.j);
        exchange(demoClazz);
        System.out.println("before: i = " + demoClazz.i + ", j = " + demoClazz.j);
    }

    public static void exchange(DemoClazz demo) {
        int temp = demo.i;
        demo.i = demo.j;
        demo.j = temp;
    }

}

class DemoClazz {
    int i;
    int j;
}

结果:
before: i = 4, j = 5
before: i = 5, j = 4

可以看到如果传入的参数是基本数据类型,exchange方法执行之后其实没有影响到原本的变量。但是如果传入的是引用数据类型,exchange方法执行之后是影响了原本的变量的。

下面给出两张内存图分别解释下两种情况下内存中是如何运行的:

基本数据类型内存图:

基本数据类型传参内存图.png

引用数据类型内存图:

引用数据类型传参内存图.png

可变个数形参

1、可变个数形参在调用时,可以传入0~无穷多个参数。

2、若参数除了可变形参还有其它参数,可变个数参数必须声明在最后一个位置。

3、可变个数形参与数组参数的使用方式一致。

/**
 * 可变个数形参
 *
 * @param args
 */
public void test(String ...args) {
   for (String str : args) {
      System.out.println(str);
   }
}

/**
 * 数组参数
 *
 * @param args
 */
public void test2(String[] args) {
   for (String str : args) {
      System.out.println(str);
   }
}
# java
java基础九(内部类)
java基础十(this关键字)
  • 文章目录
  • 站点概览
theboyaply

theboyaply

好记性不如烂笔头

184 日志
13 分类
27 标签
Github E-mail
Creative Commons
0%
© 2019 — 2023 theboyaply
由 Halo 强力驱动
|
主题 - NexT.Gemini
湘ICP备19009291号

湘公网安备 43312402001034号