java - 将方法的返回值分配给 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 中到处都看到过这种情况。
解决方案
让我尝试回答您作为评论提出的问题: 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);
对于这段代码:
- if
dog.size > 0
为真,d2
并且c
将引用同一个对象。因此,您对其中之一所做的任何更改都会反映在两者上。 - 如果
dog.size > 0
为假,c
将被分配null
推荐阅读
- c# - 如何传递 IEnumerable 数组
在 ASP.NET MVC 中正确地从一个视图到另一个视图? - .net-core - .NetCore 2.2 SignalR 问题
- python - Python3 RSA publickKey 加密
- python - Python 在最后 100 个值上滑动 MinMaxScaler
- java - Java:如何处理系统的截止时间?
- javascript - 如果正则表达式匹配连续的分隔符,则添加空字符串
- python - 如何通过程序获取 chrome 配置文件路径?
- python - 为什么 selenium 无法在我的 mac 上安装它?
- node.js - 无法访问 npm
- javascript - Twilio 可编程视频 - 加入房间时出现 Web Socket 错误