java重新定义变量和范围
我目前正在参加CSE的介绍课程,有一个问题来自课堂上的一些材料。在其中一张幻灯片上,教授定义了这种方法:
public int myMethod()
{
int retval, itemp = 100;
retval = itemp;
{
int retval, itemp = 75;
retval = itemp;
}
return retval;
}
根据教授所说,retval返回/保持值为100,但当我打开Eclipse/命令行并编写该方法时,它不会编译。它一直说retval声明了两次,因此不会编译程序。这里出了什么问题,有什么指导吗?还有,“retval=itemp;”的意义是什么?它们都初始化为相同的值,那么这行有什么用途吗
# 1 楼答案
最好是这样的代码:
这会将retVal变量设置为保存一个值
不,他们不是。itemp在这两个位置中持有不同的值
# 2 楼答案
这不会编译,因为不能在
same scope
中两次声明具有相同identifier
的变量可以做的是重新声明给定范围内的现有变量:
这是因为myVar在
visible
的范围内,但没有在其中声明{}
没有创建一个全新的作用域,因此您的老师想要做的事情失败了此外:
这里的第一行声明了retval和itemp,但只初始化了itemp,所以retval是未初始化的。这就是为什么第二行将itemp值分配给它。但由于这些是基本值,它将复制itemp的值并将其放在堆栈上,因此现在有两个不同的值。改变一个不会改变另一个
没有冒犯教授的意思。但如果我是你,我会放弃那些幻灯片,去拿一本关于Java的好书(比如核心Java或Java思维)和一些CS入门书(因为这是本课程的目标?)比如“计算机程序的结构和解释”