Java 语法问题

渡码 2015-03-06 03:47:15
int ei = 5;
for (int i = 0; i < 10; i++) {
int ei = 10;
}


for (int i = 0; i < 10; i++) {
int ei = 10;
}
int ei = 5;

为什么上面的代码报错,而下面的代码不报错。
...全文
425 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
飏飏一蝶 2015-03-09
  • 打赏
  • 举报
回复
可以认为(局部)变量作用域是从局部变量开始定义处到下一个“}”结束(“}”是和局部变量之前与“}”匹配的那个)
放纵的青春 2015-03-09
  • 打赏
  • 举报
回复
这·· 很基础的问题啊
JPF1024 2015-03-08
  • 打赏
  • 举报
回复



	
int ei = 5;//1
        for (int i = 0; i < 10; i++) {
            int ei = 10;//报错是因为1处的代码依然有效,
        }
//上面的代码报错是因为已经有一个ei的变量了,

//---------------------------------------------------
for (int i = 0; i < 10; i++) {
            int ei = 10;
        }
        int ei = 5;
下面那个不报错是因为ei只是影响for循环里面,所以在外面再次定义是没有问题的。 作用域问题而已。
sevendays 2015-03-08
  • 打赏
  • 举报
回复
这是变量作用域的问题,简单的说第一个int ei在for循环外已经定义过了,那么他的作用域就包含了for循环内的内容。如果在for循环中再次定义,就造成了重复定义的问题。 第二个因为首先在for循环中定义了,所以当for循环结束的时候,这个变量就会被自动销毁,所以你可以在for循环外面再次定义。
爱摸鱼de老邪 2015-03-07
  • 打赏
  • 举报
回复
引用 7 楼 openXMPP 的回复:
这个你要看Java规范了 见chapter 6.4 Shadowing and Obscuring 里面说的是 Some declarations are not permitted within the scope of a local variable, formal parameter, exception parameter, or local class declaration because it would be impossible to distinguish between the declared entities using only simple names. 也就是说Java禁止出现在一个低级的作用域里声明使用一个“高级域”里的变量。
++
zhuhai__yizhi 2015-03-07
  • 打赏
  • 举报
回复

{
int ei = 5;
}
for (int i = 0; i < 10; i++) {
	int ei = 10;
}
这样子写也是对的。 这里大概需要理解两个重要的概念,代码块和作用域,还有程序编译是从上往下扫描的。 上面两个ei的作用域都在{}内部。所以互不干扰,正确。

for (int i = 0; i < 10; i++) {
			int ei = 10;
		}
		int ei = 5;
// ------------------------------------
以下
这个例子正确是因为,第一个ei的作用域在{}里面。而第二个ei的作用域,是从它定义开始往下都能其作用。 所以也不会出现重定义。
乔巴好萌 2015-03-06
  • 打赏
  • 举报
回复
这个你要看Java规范了 见chapter 6.4 Shadowing and Obscuring 里面说的是 Some declarations are not permitted within the scope of a local variable, formal parameter, exception parameter, or local class declaration because it would be impossible to distinguish between the declared entities using only simple names. 也就是说Java禁止出现在一个低级的作用域里声明使用一个“高级域”里的变量。所以下面这个也是编译错误的 public class Test { public static void main(String[] e) { int e = 10; } }
code小生 2015-03-06
  • 打赏
  • 举报
回复
int ei = 5; for (int i = 0; i < 10; i++) { int ei = 10; } 这段代码必然会报错,因为你的ei在开始就定义了,当执行for循环时,出现重新定义的现象,当然会出现“ei已在前面定义"的错误。 for (int i = 0; i < 10; i++) { int ei = 10; } int ei = 5; 这个不会报错是因为for循环里面的ei和外面的ei是两个变量,里面的ei作用域只在for循环里面有效,而外面的ei值一直是5,且不会报错。
姜小白- 2015-03-06
  • 打赏
  • 举报
回复
上面的 ei 变量作用域包含 下面的for 循环块,会影响到for 循环块内,在for 循环块内再定义 ei ,则属于重复定义同名变量; 下面的 ei 定义在for 循环块内,它的作用域仅在 for 循环块内,不会影响到 for 循环块外面。
sxlxxyssq 2015-03-06
  • 打赏
  • 举报
回复
变量重复定义了
kissoday 2015-03-06
  • 打赏
  • 举报
回复
这是变量的作用域问题 楼上答的都非常好了.
yetian_lin 2015-03-06
  • 打赏
  • 举报
回复
for if try等里面定义的变量只影响到所在的代码快里面。粗浅的理解方法就是{}中定义的只影响{}中间的。
jsshizhanab 2015-03-06
  • 打赏
  • 举报
回复
上面的报错是因为第一个声明的ei变量的作用范围包含第二个ei变量的作用范围,第二个就没有这个问题。

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧