局部变量重名问题

skycncomp 2005-10-13 10:34:04
在同一个方法是不可以有同一个变量名存在的,
突然想到为什么
for(int i = 0; i < 10; i++) {
Date d = new Date();
String s = new String("ssssss");
}

这样的重复名字可以存在呢?
...全文
292 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
wb0622 2005-10-19
  • 打赏
  • 举报
回复

d和s只作用于本次循环中不影响下次循环
trumplet 2005-10-19
  • 打赏
  • 举报
回复
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
for (int i=1; i<10; i++){
String s = new String("ssssss");
if (i==5) s="5";
System.out.println(i + " " + s);
}

运行结果:
1 ssssss
2 ssssss
3 ssssss
4 ssssss
5 5
6 ssssss
7 ssssss
8 ssssss
9 ssssss
skycncomp 2005-10-19
  • 打赏
  • 举报
回复
那要是这样写呢?
for(int i = 0; i < 10; i++) {
Date d = new Date();
String s = "ssssss";
}
同样每次都生成一个新对象吗?
aspirerME 2005-10-14
  • 打赏
  • 举报
回复
每次都生成了一个新的对象,这样好理解点。
trumplet 2005-10-13
  • 打赏
  • 举报
回复
for(int i = 0; i < 10; i++) {
Date d = new Date();
String s = new String("ssssss");
}

这里的new Date()和new String(),只是通知编译器为for循环语句块分配内存空间,作用域仅在for循环内部。声明变量(包括变量的初始化)不是可执行语句,是编译期做的事,而不是运行期做的事。
thumb3344 2005-10-13
  • 打赏
  • 举报
回复
这个问题很有意思啊。
差点被蒙了。
holy_phoenix 2005-10-13
  • 打赏
  • 举报
回复
这不是重名。要分清楚编译期和运行期是不同的两个阶段。
trumplet 2005-10-13
  • 打赏
  • 举报
回复
可以,因为每循环一次就重新给s分配了一个地址。
--------------------------------------------
谁说的?竟然有这事?
yanxiazhiqiu 2005-10-13
  • 打赏
  • 举报
回复
楼上,哈!
trumplet 2005-10-13
  • 打赏
  • 举报
回复
for(int i = 0; i < 10; i++) {
Date d = new Date();
String s = new String("ssssss");
}
-------------------------
这4行代码里重复名字的变量吗?



第一行里有3个i,如果这也算是重复名字的话,……………………
superslash 2005-10-13
  • 打赏
  • 举报
回复
for(int i = 0; i < 10; i++) {
Date d = new Date();
String s = new String("ssssss");
}

这样的重复名字可以存在呢?
============================
哪有重复啊?
bixuehui 2005-10-13
  • 打赏
  • 举报
回复
可以,因为每循环一次就重新给s分配了一个地址。
believefym 2005-10-13
  • 打赏
  • 举报
回复
一个for循环结束,作用域消失,接着进入下一个循环的作用域

62,614

社区成员

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

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