温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java参数怎么传递

发布时间:2026-10-24 20:10:38 来源:亿速云 阅读:92 作者:小樊 栏目:编程语言

在 Java 中,参数传递只有一种方式:值传递(pass by value)。不过因为 Java 有“基本类型”和“引用类型”的区别,很多人会误以为是“引用传递”。下面详细说明。


一、基本类型(int、double、char 等)

传递的是“值的副本”,方法内修改不会影响原变量。

public static void change(int x) {
    x = 10;
}

public static void main(String[] args) {
    int a = 5;
    change(a);
    System.out.println(a); // 输出 5
}

✅ 原因:a 的值 5 被复制给 x,x 的改变不影响 a


二、引用类型(对象、数组)

传递的是“引用的副本”(不是对象本身,也不是引用传递)

class Person {
    int age;
}

public static void grow(Person p) {
    p.age = 20;
}

public static void main(String[] args) {
    Person person = new Person();
    person.age = 10;
    grow(person);
    System.out.println(person.age); // 输出 20
}

✅ 原因:

  • person 和 p 指向同一个对象
  • 修改对象内容(p.age)会影响原对象

三、引用类型的“重新赋值”

如果在方法里让参数指向新对象,原引用不受影响

public static void reset(Person p) {
    p = new Person(); // 只改变 p 的指向
    p.age = 99;
}

public static void main(String[] args) {
    Person person = new Person();
    person.age = 10;
    reset(person);
    System.out.println(person.age); // 输出 10
}

✅ 原因:

  • p 只是 person 的副本
  • p = new Person() 只改了 p

四、数组也是引用类型

public static void modify(int[] arr) {
    arr[0] = 100;
}

public static void main(String[] args) {
    int[] a = {1, 2, 3};
    modify(a);
    System.out.println(a[0]); // 100
}

五、总结一句话

Java 永远是值传递

  • 基本类型:传“值”
  • 引用类型:传“引用的值(地址副本)”

如果你愿意,我也可以:

  • 用图帮你画内存模型
  • 对比 C++ 的引用传递
  • 讲 String 为什么看起来像“传值”

你想看哪一个?

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手