gpt4 book ai didi

java - 相同的变量名使用了两次但程序没有抛出错误?

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

在下面的链接列表代码中

为什么 Link newLink = new Link() 在第二次作为 newlink 调用 thelist.insertfirst() 时没有给出错误> 已经定义了吗?

我的理解 - 变量 newlink 的范围是方法 insertfirst()

Link newLink = new Link(id, dd);

当创建链接newlink时,变量newlink保存所创建链接对象的内存地址。

newLink.next = 第一个;

first 是一个链接变量,其中包含链接对象的内存地址。

然后,newlink.next()指向变量first内存地址中包含的对象

first = newLink;

然后,变量first指向newlink。这意味着现在首先包含对象newlink的内存地址(newlink本身包含实际对象的地址)。

当该方法完成时,变量“newlink”丢失,但我们不在乎,因为我们已经复制内存地址(在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 的变量并为其分配一个值。因此,当您在下面两行中使用该变量的名称时,它当然是新创建的变量。它不是上次调用该方法时创建的,也不是上次调用之前的时间。不可能出现困惑。这就是允许它的原因。

范围是关于程序中的哪个位置,如果愿意的话,可以使用某个文本名称。在本例中,在其声明和最近的右花括号之间再向下三行。范围并不是关于允许您调用该代码段并每次创建具有相同名称的新变量的次数。换句话说,在一个范围内,当您编写程序时,您只能键入一次具有特定名称的变量的声明,但您可以使用该声明来实际创建程序运行时可以多次使用变量。

是的,你的描述和类比是正确的。

关于java - 相同的变量名使用了两次但程序没有抛出错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54729984/

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