gpt4 book ai didi

java - Java 中的局部变量 VS 全局变量

转载 作者:行者123 更新时间:2023-12-02 05:37:02 24 4
gpt4 key购买 nike

我以为我理解了java中局部变量和全局变量的区别,直到今天看到一个例子。在此代码中,尝试使用一种方法将元素添加到链接列表:

public void addDataPacket(DataPacket data){
PacketQueueElement newElement = new PacketQueueElement(data);
if(firstElement != null){
lastElement.setNextElement(newElement);
lastElement = newElement;
}
else{
firstElement = newElement;
lastElement = newElement;
}
}

我不明白的是为什么方法关闭后newElement没有消失?因为这是一个局部变量,并没有在类中的任何地方定义。下面是这个类的完整代码:

public class PacketQueue {

/** Das erste Element in der Warteschlange */
private PacketQueueElement firstElement;

/** Das letzte Element in der Warteschlange. */
private PacketQueueElement lastElement;

/**
* Instanziert eine neue Warteschlange.
*/
public PacketQueue(){
this.firstElement = null;
this.lastElement = null;
}

/**
* Fuegt ein neues Paket ans Ende der Warteschlange an.
*
* @param data Das neue Paket
*/
public void addDataPacket(DataPacket data){
PacketQueueElement newElement = new PacketQueueElement(data);
if(firstElement != null){
lastElement.setNextElement(newElement);
lastElement = newElement;
}
else{
firstElement = newElement;
lastElement = newElement;
}
}

/**
* Entfernt das erste Element der Warteschlange und gibt es zurueck.
*
* @return Das erste Element in der Warteschlange
*/
public PacketQueueElement getAndRemoveFirstElement(){
PacketQueueElement element = this.firstElement;
this.firstElement = element.getNextElement();
return element;
}

/**
* Gibt das erste Paket aus dem ersten Element zurueck.
*
* @return Das erste Paket
*/
public DataPacket getFirstDataPacket(){
return this.firstElement.getData();
}

/**
* Entfernt das erste Paket der Warteschlange und gibt es zurueck.
*
* @return Das erste Paket in der Warteschlange
*/
public DataPacket getAndRemoveFirstDataPacket(){
return this.getAndRemoveFirstElement().getData();
}

/**
* Gibt das erste Element der Warteschlange zurueck
*
* @return Das erste Element
*/
public PacketQueueElement getFirstElement(){
return this.firstElement;
}



/**
* Ueberprueft, ob die Wartschlange leer ist.
*
* @return true, wenn sie leer ist
*/
public boolean isEmpty(){
if(firstElement == null){
return true;
}
else{
return false;
}
}

/* (non-Javadoc)
* @see java.lang.Object#toString()
*/
public String toString(){
PacketQueueElement element = this.firstElement;
String s = "";
while(element != null){
s += element + "\n";
element = element.getNextElement();
}
return s;
}

提前致谢

最佳答案

enter image description here newElement 只是对在内存中创建的对象的引用。

firstElement 然后持有对同一对象的引用。

引用 newElement 确实是一个局部变量,但引用所引用的对象随后也被另一个引用引用,即 firstElement。所以在 addDataPacket() 方法完成后,newElement 引用不再存在,但它引用的对象仍然存在于内存中并且该对象由 引用>第一个元素

关于java - Java 中的局部变量 VS 全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21858226/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com