温馨提示×

温馨提示×

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

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

怎么理解java参数

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

理解 Java 的参数(方法参数),核心要分清:参数是怎么传的、基本类型和引用类型的区别、值传递的本质。下面用通俗 + 示例讲清楚。


一、Java 只有「值传递」

这是最重要的一点:

Java 中,方法参数传递永远是“值传递”(pass by value)

也就是说:

  • 调用方法时,实参的值会被复制一份传给形参
  • 形参拿到的是“副本”,不是原来的变量本身

二、基本类型参数(int、double、char…)

示例

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

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

发生了什么?

  1. a = 10
  2. 调用 change(a) 时,复制 a 的值 10
  3. 方法里改的是 x,和 a 没关系
  4. 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
}

发生了什么?

  1. person 存的是对象地址
  2. 调用 grow(person) 时,复制的是地址值
  3. p 和 person 指向同一个对象
  4. 通过 p 改对象内容,person 也能看到

✅ 引用类型:传的是“地址值的副本”


四、一个容易误解的例子(重点)

public static void swap(Person a, Person b) {
    Person temp = a;
    a = b;
    b = temp;
}

public static void main(String[] args) {
    Person x = new Person();
    Person y = new Person();
    swap(x, y);
    // x 和 y 没有交换
}

为什么没交换?

  • a、b 只是 地址副本
  • 方法里改的是副本指向谁
  • 原来的 x、y 不受影响

✅ 引用的“重新指向”不会影响外面的变量


五、数组也是引用类型

public static void change(int[] arr) {
    arr[0] = 99;
}

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

数组变量存的是地址,规则同对象。


六、一句话总结

  • Java 只有值传递
  • 基本类型 → 传“数据副本”
  • 引用类型 → 传“地址副本”
  • 能通过参数改对象内容,但不能改引用本身

如果你愿意,我也可以用 画图方式、面试常问题 或 和 C/C++ 对比 再讲一遍。

向AI问一下细节

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

AI
助
手