首页 >Java >java教程 >Java 是否通过引用传递原语?

Java 是否通过引用传递原语?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-07 17:45:021042浏览

Does Java Pass Primitives by Reference?

Java 中基元的按引用传递

Java 采用按值传递,与 C 不同,后者使用按引用传递。这可以创建这样的场景:在方法中修改基本数据类型(例如 int、float)不会影响其在方法外部的值。

考虑以下 Java 代码:

public class XYZ {
    public static void main() {
        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

toyNumber 变量在 play() 方法之外不会被修改,因为它是按值传递的。

Java 中按引用传递的替代方法:

要模仿 C 在 Java 中通过引用传递原语,可以使用以下几个选项:

1。公共成员变量:

使用 toyNumber 的公共成员变量创建一个类,并传递对该类的引用。

class MyToy {
    public int toyNumber;
}
void play(MyToy toy) {
    System.out.println("Toy number in play " + toy.toyNumber);
    toy.toyNumber++;
    System.out.println("Toy number in play after increment " + toy.toyNumber);
}

2.返回值:

不是通过引用传递,而是从方法中返回修改后的值。

int play(int toyNumber) {
    System.out.println("Toy number in play " + toyNumber);
    toyNumber++;
    System.out.println("Toy number in play after increment " + toyNumber);
    return toyNumber;
}

在 main 方法中,使用返回值更新 toyNumber。

3。类/静态变量:

如果 play() 和 main() 方法属于同一类,则将 toyNumber 转换为类成员变量。

4.一个元素的数组:

这是一种 hack,但需要传递一个单元素数组并修改其值。

void play(int[] toyNumber) {
    System.out.println("Toy number in play " + toyNumber[0]);
    toyNumber[0]++;
    System.out.println("Toy number in play after increment " + toyNumber[0]);
}

以上是Java 是否通过引用传递原语?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn