首页 > Java > java教程 > 如何在Java中实现基元的引用传递效果?

如何在Java中实现基元的引用传递效果?

Mary-Kate Olsen
发布: 2024-11-12 22:15:03
原创
996 人浏览过

How Do You Achieve a Pass-by-Reference Effect for Primitives in Java?

Java 相当于原语按引用传递

在 C 中,按引用传递允许函数修改其范围之外的变量。然而,Java 是按值传递进行操作的,因此很难为基元实现相同的效果。

考虑以下代码:

public class XYZ {
    public static void main(String[] args) {
        int toyNumber = 5;
        XYZ temp = new XYZ();
        temp.play(toyNumber);
        System.out.println("Toy number in main " + toyNumber);
    }

    void play(int toyNumber) {
        System.out.println("Toy number in play " + toyNumber);
        toyNumber++;
        System.out.println("Toy number in play after increment " + toyNumber);
    }
}
登录后复制

此代码将导致:

Toy number in play 5
Toy number in play after increment 6
Toy number in main 5
登录后复制

与 C 不同,在 play() 中对 toyNumber 进行的更改不会影响其在 main() 中的值。这是因为 Java 通过复制而不是引用传递原始值。

替代方法

1。使用对象包装器:

一种方法是将基元包装在对象中并通过引用传递对象:

class ToyNumber {
    int toyNumber;
}
登录后复制
public static void main(String[] args) {
    ToyNumber toyNumber = new ToyNumber(5);
    XYZ temp = new XYZ();
    temp.play(toyNumber);
    System.out.println("Toy number in main " + toyNumber.toyNumber);
}
登录后复制
void play(ToyNumber toyNumber) {
    System.out.println("Toy number in play " + toyNumber.toyNumber);
    toyNumber.toyNumber++;
    System.out.println("Toy number in play after increment " + toyNumber.toyNumber);
}
登录后复制

此方法允许play() 中所做的更改将反映在 main() 中。但是,它通过创建对象引入了额外的开销。

2.返回值:

另一个选项是返回修改后的值:

int play(int toyNumber) {
    ...
    return toyNumber;
}
登录后复制
public static void main(String[] args) {
    int toyNumber = 5;
    toyNumber = temp.play(toyNumber);
    System.out.println("Toy number in main " + toyNumber);
}
登录后复制

此方法有效,但需要更改调用站点以接收返回值。

3.静态或类变量:

如果 play() 和 main() 位于同一类或类实例中,请考虑使用静态或类变量:

class XYZ {
    static int toyNumber = 5;
    ...
}
登录后复制
public static void main(String[] args) {
    XYZ.play();
    System.out.println("Toy number in main " + XYZ.toyNumber);
}
登录后复制
static void play() {
    ...
    XYZ.toyNumber++;
    ...
}
登录后复制

此方法允许两个函数修改同一变量,但可能会导致并发问题,不建议用于多线程应用程序。

以上是如何在Java中实现基元的引用传递效果?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板