首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >java中方法的参数传递机制

java中方法的参数传递机制

原创
作者头像
code-x
修改2022-08-17 11:50:07
修改2022-08-17 11:50:07
9730
举报
文章被收录于专栏:code-xcode-x

来看一段代码

代码语言: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;
    }
}
代码语言:java
复制
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);
    }
}

运行结果是

1.png
1.png

对象 a b 的 引用并没有发生改变

下面就说说 java的参数传递机制

先说结论:java参数传递并不是引用传递,而是值传递

看下图

2.png
2.png

swap方法中,a b 向 x y 传递的是值,是 a b 在栈中的值,此处的 传递=拷贝

也就是说,a b 与  x y 除了类型一致外、值相等(指向了堆的同一地址),没有任何相同处 

a b与x y完完全全不相干

都不相干了,x y 不管这么改变自身的值 ,与 a b 有什么关系呢

所以, 方法退出,a b 的引用并没有发生变化

再看下一个

改写swap方法,

代码语言:java
复制
public static void swap(Man m) {
        m = new Man("xx",88);
}

调用运行

3.png
3.png

传递的是值

传递的是值

传递的是值

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 对象 a b 的 引用并没有发生改变
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档