首页 > 解决方案 > 将方法的返回值分配给 Java 中的 Class 类型变量时会发生什么?

问题描述

我有一个公共类狗。

方法一:

public Dog getDog(Dog dog){
    if(dog.size>0){
      return dog;
    }
    return null;
}
    

方法二:

public Dog getNewDog(){
   return new Dog();
}

最后,将方法返回值分配回去:-

Dog mydog = new Dog();
Dog d2 = new Dog();

Dog c = mydog.getDog(d2);   // are we assigning a reference variable back to another reference?
Dog k = mydog.getNewDog(); // Are we assigning a new dog object itself to the Dog type variable.

现在,为什么我们总是将方法中的值分配给引用变量?我在 Java 中到处都看到过这种情况。

标签: javaobjectmethodsreferenceparameter-passing

解决方案


让我尝试回答您作为评论提出的问题: A. 为什么我们总是将方法中的值分配给 Reference 变量?- 不一定是真的。有些类一旦给定了值,就无法更改。这被称为Immutable。例如,String它是不可变的,因此一旦为它分配了一个值,就无法更改相同的字符串。让我们看看下面的例子:

String s1 = "1";
String s2 = s1.concat("2")
s2.concat("3");
System.out.println(s2); // print out 12

输出为12。原因是,每当您调用更改值的方法时,您都必须将其分配回去,否则您将丢失新值。Immutable如您所见,对于一个对象,有必要重新分配。但是,这是特殊课程。在 的情况下Dog,您不必每次更改其属性时都分配它。除非您明确需要创建一个新Dog对象。

B. 我们是否将新的狗对象本身分配给 Dog 类型变量?每当您声明一个引用类型的变量(扩展 Object)时,它将被分配为 null。如果您尝试访问其属性,则会导致NullPointerException. 因此,请记住,您必须为其分配一个值。

请注意,这Dog k = mydog.getNewDog();相当于Dog k = new Dog();在您的代码中说。

C. 我们是否将引用变量分配回另一个引用?让我们看看你的代码:

public Dog getDog(Dog dog){
    if(dog.size>0){
        return dog;
    }
    return null;
}
        
Dog d2 = new Dog();
Dog c = mydog.getDog(d2);

对于这段代码:

  • ifdog.size > 0为真,d2并且c将引用同一个对象。因此,您对其中之一所做的任何更改都会反映在两者上。
  • 如果dog.size > 0为假,c将被分配null

推荐阅读