![](/img/trans.png)
[英]Why Declaring a TextView object with the same name twice create an error while Declaring it inside a loop doesn't?
[英]Same variable name used twice but program doesn't throw error?
在以下代码的链表中
为什么Link newLink = new Link()
在第二次thelist.insertfirst()
时thelist.insertfirst()
给出错误,因为已经定义了newlink
?
我的理解-变量newlink
范围是方法insertfirst()
。
Link newLink = new Link(id, dd);
创建链接newlink
,变量newlink
保留创建的链接对象的内存地址。
newLink.next = first;
first
是一个链接变量,其中包含链接对象的内存地址。
然后,将newlink.next()
指向object contained at the memory address of the variable first
的object contained at the memory address of the variable first
。
first = newLink;
然后,变量first
指向newlink
。 这意味着第一个现在包含对象newlink
的内存地址(newlink本身包含指向实际对象的地址)。
方法完成后,变量“ newlink”会丢失,但我们已经在copied
链接对象的内存地址( next
字段中),因此我们不在乎。
这个比喻是正确的吗?
class Link
{
public int iData; // data item
public double dData; // data item
public Link next; // next link in list
public Link(int id, double dd) // constructor
{
iData = id; // initialize data
dData = dd; // ('next' is automatically
} // set to null)
///////////////////////////////////////////////////// //////////////
class LinkList
{
private Link first; // ref to first link on list
public LinkList() // constructor
{
first = null; // no links on list yet
}
// insert at start of list
public void insertFirst(int id, double dd)
{ // make new link
Link newLink = new Link(id, dd);//######################################## DOESN'T THROW ERROR
newLink.next = first; // newLink --> old first
first = newLink; // first --> newLink
}
} // end class LinkList
///////////////////////////////////////////////////// //////////////
class LinkListApp
{
public static void main(String[] args)
{
LinkList theList = new LinkList(); // make new list
theList.insertFirst(22, 2.99); // insert four items
theList.insertFirst(44, 4.99);
theList.insertFirst(66, 6.99);
theList.insertFirst(88, 8.99);
} // end main()
} // end class LinkListApp
///////////////////////////////////////////////////// //////////////
您是正确的,这里没有错误。 在方法中具有局部变量然后多次调用该方法是非常非常普遍的。 是的,您可能会说第二次调用该方法时它不是同一变量,因为每次执行该方法时都会创建该变量。
您无法在同一范围内声明两个具有相同名称的变量的原因是,您将不知道哪个是哪个。 此问题不在您的代码中。 每次调用您的方法时, newLink
创建一个名为newLink
的变量并newLink
分配一个值。 因此,在以下两行中使用此变量的名称时,它当然是新创建的变量。 不是上次调用该方法时创建的,也不是上次调用前的时间。 不能混淆。 这就是允许它的原因。
范围是关于程序中的位置,如果可以的话,可以使用某个名称。 在这种情况下,在其声明和最接近的右花括号之间,向下三行。 作用域与允许多少次调用该代码段以及每次创建一个具有相同名称的新变量无关 。 换句话说,在一个范围内,您只能在编写程序时键入一次具有特定名称的变量的声明,但是您可以在运行程序时使用该声明实际创建变量的次数不限。
是的,您的描述,您的类比是正确的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.