用Java传递和返回对象

我们知道这是一个核心概念,在Java中总是按值传递而不是按引用传递,因此在本文中,我们将集中讨论在将原始传递给方法并传递引用的情况下如何验证此概念。

如果将原始类型作为参数传递给方法,则分配给该原始类型的值将传递给该方法,并且该值成为该方法的局部值,这意味着该方法对该值的任何更改都不会更改您传递给方法的原语的值。

现在,在再次传递对方法的引用的情况下,Java遵循相同的按值传递规则,现在让我们了解它的发生方式。

我们知道如果引用被分配给该引用,Java中的引用将保留所创建对象的内存位置,否则将其初始化为null。现在要记住的一点是,引用的值是所分配对象的内存位置因此,每当我们将引用传递给任何方法作为参数时,我们实际上就会传递该对象的内存位置,该对象被分配给该特定引用。从技术上讲,这意味着目标方法具有我们创建的对象的内存位置并且可以访问它。因此,如果目标方法访问我们的对象并对它的任何属性进行更改的情况都比原始对象中更改后的值要多。

示例

public class PassByValue {
   static int k =10;
   static void passPrimitive(int j) {
      System.out.println("the value of passed primitive is " + j);
      j = j + 1;
   }
   static void passReference(EmployeeTest emp) {
      EmployeeTest reference = emp;
      System.out.println("the value of name property of our object is "+ emp.getName());
      reference.setName("Bond");
   }
   public static void main(String[] args) {
      EmployeeTest ref = new EmployeeTest();
      ref.setName("James");
      passPrimitive(k);
      System.out.println("Value of primitive after get passed to method is "+ k);
      passReference(ref);
      System.out.println("Value of property of object after reference get passed to method is "+          ref.getName());
   }
}
class EmployeeTest {
   String name;
   public String getName() {
      return name;
   }
   public void setName(String name) {
      this.name = name;
   }
}

输出结果

the value of passed primitive is 10
Value of primitive after get passed to method is 10
the value of name property of our object is James
Value of property of object after reference get passed to method is Bond