public static void main(String[] args) {
WeatherData subject =new WeatherData();
new ShowEstadistics(subject);
}
public class WeatherData implements Subject {
ArrayList<Observer> observers;
public WeatherData() {
observers = new ArrayList();
}
@Override
public void registerObserver(Observer o) {
observers.add(o);
}
}
public class ShowEstadistics implements Observer{
WeatherData weatherdata;
public ShowEstadistics(WeatherData subject) {
this.weatherdata=subject;
this.weatherdata.registerObserver(this);
}我不知道观察员是如何在本部分的主题中注册的:
public ShowEstadistics(WeatherData subject) {
this.weatherdata=subject;
this.weatherdata.registerObserver(this);
} 因为我将registerObserver方法应用于weatherdata,但出于某种原因,它也在subject中注册。我也不知道原因。
谁能给我解释一下。
发布于 2020-07-15 23:58:30
假设您有以下代码场景:
Integer x=new Integer(4);
Integer y=new Integer(5);
y=x;
x=new Integer(2);在这种情况下,你认为y的价值是多少?它是包含5的Integer对象吗?答案是包含2个的的Integer对象。
当我们说Integer x=new Integer(4)时,我们指的是x指向内存中有一个包含值为4的对象的地址。类似地,y指向内存中的一个地址,该地址的对象包含值为5。写入y=x表示,我们移除包含5的对象的地址,并将指针指向x所指向的当前值为5的对象。包含5的对象的地址不再有任何变量指向它,因此不能调用或修改它的值。在使用x=new Integer(2)将x和y指向的地址对象更改为值为2的对象后,调用这些变量将返回相同的对象(因为它们具有相同的引用)。
现在,这是一个基于Integer对象类型的基本示例,但可以应用于任何更复杂的对象。
https://stackoverflow.com/questions/62925118
复制相似问题