Java中方法的参数传递机制

简介: Java中方法的参数传递机制

来看一段代码

public class Man {

private String name;
private Integer age;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public Integer getAge() {
    return age;
}

public void setAge(Integer age) {
    this.age = age;
}

@Override
public String toString() {
    return "Man{" +
            "name='" + name + '\'' +
            ", age=" + age +
            '}';
}

public Man(String name, Integer age) {
    this.name = name;
    this.age = age;
}

public static void swap(Man x, Man y) {
    Man temp = y;
    y = x;
    x = temp;
}

}
public class Main {

public static void main(String[] args) {
    Man a = new Man("a", 65);
    Man b = new Man("b", 66);
    Man.staticswap(a, b);
    System.out.println(a + "\n" + b);
}

}
运行结果是

image.png

对象 a b 的 引用并没有发生改变
下面就说说 java的参数传递机制
先说结论:java参数传递并不是引用传递,而是值传递
看下图

image.png

swap方法中,a b 向 x y 传递的是值,是 a b 在栈中的值,此处的 传递=拷贝
也就是说,a b 与 x y 除了类型一致外、值相等(指向了堆的同一地址),没有任何相同处
a b与x y完完全全不相干
都不相干了,x y 不管这么改变自身的值 ,与 a b 有什么关系呢
所以, 方法退出,a b 的引用并没有发生变化
再看下一个
改写swap方法,
public static void swap(Man m) {

    m = new Man("xx",88);

}
调用运行

image.png

传递的是值
传递的是值
传递的是值

目录
相关文章
|
15天前
|
Java
Java中ReentrantLock中tryLock()方法加锁分析
Java中ReentrantLock中tryLock()方法加锁分析
13 0
|
4天前
|
Java 关系型数据库 MySQL
Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
【4月更文挑战第12天】Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
28 3
|
1月前
|
开发框架 Java API
java反射机制的原理与简单使用
java反射机制的原理与简单使用
17 1
|
27天前
|
缓存 Java C#
【JVM故障问题排查心得】「Java技术体系方向」Java虚拟机内存优化之虚拟机参数调优原理介绍(一)
【JVM故障问题排查心得】「Java技术体系方向」Java虚拟机内存优化之虚拟机参数调优原理介绍
75 0
|
1天前
|
Java
Java 与垃圾回收有关的方法
Java 与垃圾回收有关的方法
|
1天前
|
Java 数据库连接
深入理解Java异常处理机制
【4月更文挑战第24天】本文将探讨Java中的异常处理机制,包括异常的概念、分类、捕获和抛出等方面。通过深入了解异常处理机制,可以帮助我们编写更加健壮的程序,提高代码的可读性和可维护性。
|
2天前
|
存储 Java 测试技术
一文搞清楚Java中的方法、常量、变量、参数
在JVM的运转中,承载的是数据,而数据的一种变现形式就是“量”,量分为:**常量与变量**,我们在数学和物理学中已经接触过变量的概念了,在Java中的变量就是在程序运行过程中可以改变其值的量。
9 0
|
6天前
|
存储 Java
Java动态转发代理IP的实现方法
Java动态转发代理IP的实现方法
22 11
|
7天前
|
Java
Java接口中可以定义哪些方法?
【4月更文挑战第13天】
14 0
Java接口中可以定义哪些方法?
|
13天前
|
Java Shell
Java 21颠覆传统:未命名类与实例Main方法的编码变革
Java 21颠覆传统:未命名类与实例Main方法的编码变革
13 0