0
点赞
收藏
分享

微信扫一扫

Java 方法形参如何变成实参 这个问题怎么解决?

Java 方法形参如何变成实参

在Java中,形参是方法定义时用来接收外部传递给方法的值或对象的变量,实参是方法调用时传递给形参的具体值或对象。本文将介绍Java中方法形参如何变成实参的机制。

1. 传值调用

在Java中,方法的参数传递是按值传递的,也就是说,将实参的值复制给形参。这意味着无论是基本数据类型还是对象,实参的改变不会影响到形参的值。

1.1 基本数据类型

对于基本数据类型,形参接收的是实参的值。下面是一个示例代码:

public class Example {
    public static void main(String[] args) {
        int num = 10;
        System.out.println("调用前:num = " + num);
        changeValue(num);
        System.out.println("调用后:num = " + num);
    }
    
    public static void changeValue(int value) {
        value = 20;
        System.out.println("方法内部:value = " + value);
    }
}

输出结果:

调用前:num = 10
方法内部:value = 20
调用后:num = 10

可以看到,虽然在changeValue方法内部将形参value的值改为了20,但是对实参num没有任何影响。

1.2 对象

对于对象,形参接收的是实参对象的引用,也就是说形参和实参指向同一个对象。下面是一个示例代码:

public class Example {
    public static void main(String[] args) {
        Person person = new Person("Alice");
        System.out.println("调用前:person.name = " + person.getName());
        changeValue(person);
        System.out.println("调用后:person.name = " + person.getName());
    }
    
    public static void changeValue(Person p) {
        p.setName("Bob");
        System.out.println("方法内部:person.name = " + p.getName());
    }
}

class Person {
    private String name;
    
    public Person(String name) {
        this.name = name;
    }
    
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
}

输出结果:

调用前:person.name = Alice
方法内部:person.name = Bob
调用后:person.name = Bob

可以看到,虽然在changeValue方法内部修改了形参p所引用的Person对象的name属性,但是由于形参和实参指向同一个对象,所以对实参也产生了影响。

2. 传引用调用

在Java中,并不支持传引用调用。虽然对象的引用是通过值传递的,但是在方法内部如果修改了形参所引用的对象,对实参并没有影响。因为实参和形参分别存储在不同的内存空间中。

下面是一个示例代码:

public class Example {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder("Hello");
        System.out.println("调用前:sb = " + sb);
        changeValue(sb);
        System.out.println("调用后:sb = " + sb);
    }
    
    public static void changeValue(StringBuilder s) {
        s.append(" World");
        System.out.println("方法内部:sb = " + s);
    }
}

输出结果:

调用前:sb = Hello
方法内部:sb = Hello World
调用后:sb = Hello World

可以看到,虽然在changeValue方法内部修改了形参s所引用的StringBuilder对象,但是对实参sb并没有影响。

综上所述,Java方法的形参通过值传递的方式变成实参,对于基本数据类型,形参接收的是实参的值;对于对象,形参接收的是实参对象的引用。无论是基本数据类型还是对象,在方法内部对形参的修改都不会影响到实参。

举报

相关推荐

0 条评论