前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java 中的原始数据类型值传递及引用类型对象的引用传递-Java快速进阶教程

Java 中的原始数据类型值传递及引用类型对象的引用传递-Java快速进阶教程

作者头像
jack.yang
发布于 2025-04-05 13:03:27
发布于 2025-04-05 13:03:27
12800
代码可运行
举报
运行总次数:0
代码可运行

1.基本数据类型的值传递

基本数据类型(如 int、float、boolean 等)是存储在栈内存中的,当将它们作为参数传递给方法时,实际传递的是它们的值。例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static void swap(int a, int b) {
    int temp = a;
    a = b;
    b = temp;
}
public static void main(String[] args) {
    int x = 10;
    int y = 20;
    swap(x, y);
    System.out.println("x = " + x + ", y = " + y);
}

这段代码中,swap 方法并没有改变 x 和 y 的值,因为它们作为参数传递给 swap 方法时,实际上传递的是它们的值,而不是它们的引用。

2. 对象类型的值传递

对象类型(如 String、数组、自定义类等)是存储在堆内存中的,当将它们作为参数传递给方法时,实际传递的是它们的引用。

2.1简单String示例
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static void changeStr(String str) {
    str = "world";
}
public static void main(String[] args) {
    String s = "hello";
    changeStr(s);
    System.out.println(s);
}

这段代码中,changeStr 方法并没有改变 s 的值,因为它们作为参数传递给 changeStr 方法时,实际上传递的是 s 的引用,changeStr 方法中的 str 只是一个新的引用,它并不影响 s 的值。

2.2自定义类示例

假设现在有一个自定义的类 Person,包含了两个属性:姓名和年龄。现在需要编写一个方法,将传入的 Person 对象的年龄加 1,但不改变原始对象的引用。示例代码如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Person {
    private String name;
    private int age;
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}
public class Example {
    public static void incrementAge(Person p) {
        p.setAge(p.getAge() + 1);
    }
    public static void main(String[] args) {
        Person p = new Person("张三", 20);
        incrementAge(p);
        System.out.println("张三的年龄为:" + p.getAge());
    }
}

在这个例子中,我们定义了一个 Person 类和一个 incrementAge 方法。incrementAge 方法接受一个 Person 对象作为参数,并将该对象的年龄加 1。由于传递的是对象的引用,所以方法内部的改变会反映到原始对象上,但对象的引用本身并没有改变。在 main 方法中,我们创建了一个 Person 对象,并将其传递给 incrementAge 方法。最后,我们输出了 Person 对象的年龄,发现它已经加了 1。

2.3总结

Java 中,所有的参数传递都是值传递。这意味着,当一个对象作为参数传递给一个方法时,实际上传递的是该对象的引用(即内存地址),而不是对象本身。因此,当方法内部修改了对象的属性时,这些改变会反映到原始对象上,因为它们引用的是同一个对象。但是,方法内部不能改变对象的引用本身,因为这是一个局部变量,只存在于方法的作用域内。如果方法需要改变对象的引用,则需要返回一个新的对象,并将其引用赋值给原始对象。因此,虽然在表现上看起来像是引用传递,但实际上 Java 中的参数传递都是值传递。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-03-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.基本数据类型的值传递
  • 2. 对象类型的值传递
    • 2.1简单String示例
    • 2.2自定义类示例
    • 2.3总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档