方法的形参和实参

方法的形参和实参

在Java中,当你调用一个方法时,会涉及到形参(形式参数)和实参(实际参数)的概念。下面是对这两个概念的详细解释和总结。

形参(形式参数)

形参是在方法声明时定义的参数,用于接收调用方法时传递的实际参数值。形参在方法签名中声明,并且在方法体内部使用。

形参的特点

  • 形参只存在于方法的内部,不会影响方法外部的任何变量。
  • 形参的类型、名称和数量决定了方法的签名。
  • 形参可以是任意数据类型,包括基本类型和引用类型。

示例

public class Example {
    public static void printMessage(String message) {
        System.out.println(message);
    }

    public static void main(String[] args) {
        printMessage("Hello, World!");
    }
}

在这个例子中,printMessage 方法的形参是 message,它的类型是 String

实参(实际参数)

实参是在调用方法时传递给方法的值。实参可以是变量、常量或其他表达式的值。

实参的特点

  • 实参可以是任意数据类型,只要与形参的类型相匹配。
  • 实参的值会被复制给形参,对于基本类型,传递的是值的副本;对于引用类型,传递的是引用的副本。
  • 实参的数量必须与形参的数量相同。

示例

public class Example {
    public static void printNumber(int number) {
        System.out.println(number);
    }

    public static void main(String[] args) {
        int x = 10;
        printNumber(x); // x 是实参
    }
}

在这个例子中,x 是一个整数变量,它的值被作为实参传递给了 printNumber 方法的形参 number

形参和实参的区别

  • 形参:方法定义时声明的参数,用于接收实参的值。
  • 实参:调用方法时提供的参数,用于给形参赋值。

值传递与引用传递

  • 基本类型:传递的是值的副本,因此改变形参不会影响实参。
  • 引用类型:传递的是引用的副本,因此如果改变形参指向的对象的内容,会影响到实参指向的对象的内容。

示例

public class Example {
    public static void changeValue(int x) {
        x = 20; // 改变形参 x 的值
    }

    public static void changeReference(MyObject obj) {
        obj.setValue(20); // 改变引用类型的对象内容
    }

    public static void main(String[] args) {
        int a = 10;
        MyObject obj = new MyObject(10);
        
        changeValue(a); // a 的值不会改变
        System.out.println("a: " + a); // 输出 10
        
        changeReference(obj); // obj 的值会改变
        System.out.println("obj.value: " + obj.getValue()); // 输出 20
    }
}

class MyObject {
    private int value;

    public MyObject(int value) {
        this.value = value;
    }

    public void setValue(int value) {
        this.value = value;
    }

    public int getValue() {
        return value;
    }
}

在这个例子中,changeValue 方法试图改变形参 x 的值,但这不会影响到实参 a 的值。而 changeReference 方法改变了形参 obj 所引用的对象的内容,这会影响到实参 obj 指向的对象的内容。

posted @   魄罗  阅读(32)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
点击右上角即可分享
微信分享提示