java - 实例 A = 实例 B,这究竟是做什么的?
问题描述
当这段代码声明 course2 = course1; 时会发生什么?因为在那之后发生的事情我无法理解。如果我注释掉 course2 = course1; 我两次获得编程基础知识。
public Course(int courseID, String courseName) {
ID = courseID;
name = courseName;
}
public String getName() {
return name;
}
public void setName(String newName) {
name = newName;
}
public static void main(String[] args) {
Course course1 = new Course(2531, "Programming Fundamentals");
Course course2 = new Course(1285, "Algorithms and Analysis");
System.out.println(course1.getName());
course2 = course1;
course2.setName("PF");
System.out.println(course1.getName());
}
这输出为:
Programming Fundamentals
PF
解决方案
course2 = course1;
将 的值更改为对(由语句创建的对象)course2
引用的同一对象的引用。course1
new Course(2531, "Programming Fundamentals")
因此两者course1
和course2
现在都引用同一个对象,因此course2.setName("PF")
具有与 相同的行为course1.setName("PF")
。因此第二次System.out.println(course1.getName())
打印"PF"
。
如果您注释掉course2 = course1;
赋值,则course2
引用不同的对象,因此course2.setName("PF")
不会影响 . 引用的对象course1
。因此第二个System.out.println(course1.getName())
仍然打印"Programming Fundamentals"
。
推荐阅读
- events - 为了通知目的,我应该在 Rx 流中使用什么类型?
- react-native - 如何在 react-native 版本 3+ 的 App.js 文件中添加构造函数
- c - 查找给定字符串中的数字总和
- javascript - 刷新数组对象时出错
- c# - 使用 itextsharp 检查添加元素是否会创建新页面
- java - 房间没有自动创建 json 模式文件
- regex - 正则表达式匹配 2 个不同的可能输入
- ios - 如何在目标 c 项目中使用目标 c 库和 swift 框架?
- xamarin.forms - Xamarin.Forms Android/iOS HttpClient.Timeout 不受尊重
- java - 将数据推送到堆栈上正在将内部的所有数据更改为最后推送的数据