Java-通过引用调用

时间:2020-02-23 14:36:24  来源:igfitidea点击:

在本教程中,我们将学习Java编程语言中的引用调用。

通过引用调用

在Java中,不存在按引用调用。
如果您了解C编程语言,他们就会知道我们可以将变量的地址传递给函数并通过该地址操纵其值。

但是Java将一切作为价值传递。
因此,为了模拟按引用进行的调用,我们可以将一个对象作为参数传递给方法。

在下面的示例中,我们将object作为参数传递给方法。
因此,对调用方法所做的任何更改都将反映在调用方法中。

class Addition {
  public void add100(Example obj) {
    System.out.println("In add100() method of Addition class.");
    System.out.println("Value of n before addition: " + obj.n);
    obj.n = obj.n + 100;
    System.out.println("Value of n after addition: " + obj.n);
    System.out.println("Returning back to the calling method.");
  }
}

public class Example {

  //variable
  public int n;

  //constructor
  Example(int n) {
    this.n = n;
  }

  //method
  public static void main(String[] args) {

    //create Example object and set value of n
    Example exampleObj = new Example(10);
    
    //create Addition object
    Addition additionObj = new Addition();

    System.out.println("In main() method of Example class.");
    System.out.println("Value of n before call: " + exampleObj.n);

    //pass an integer value
    System.out.println("Passing exampleObj to add100() method of Addition class.");
    additionObj.add100(exampleObj);
    System.out.println("Back from add100() method of Addition class.");

    System.out.println("In main() method of Example class.");
    System.out.println("Value of n after call: " + exampleObj.n);

  }
}
$javac Example.java 
$java Example
In main() method of Example class.
Value of n before call: 10
Passing exampleObj to add100() method of Addition class.
In add100() method of Addition class.
Value of n before addition: 10
Value of n after addition: 110
Returning back to the calling method.
Back from add100() method of Addition class.
In main() method of Example class.
Value of n after call: 110

在上面的代码中,我们正在创建" Example"类的" exampleObj"对象,并通过其构造函数将" n"的值设置为10。

然后,我们创建" Addition"类的另一个对象" additionObj",并将" exampleObj"对象作为参数传递给" Addition"类的" add100()"方法。

在add100()方法内部,我们将100添加到Example类的exampleObj对象的n中。

因此,当我们从被调用的方法add100()返回到调用方法main()时,我们仍然可以看到对exampleObj对象的n所做的更改。

这是因为当我们将exampleObj作为参数传递给add100()方法时,add100()方法的obj参数会获得对象的引用,因此它也指向相同的对象内存中的对象,例如exampleObj对象。