for循环中的if语句加break有什么后果!

b97672y 2011-11-09 10:36:50
@Override
public void setInput(Traffic traffic) {
this.traffic = traffic;

for (IAttribute attr : traffic.getAttrs()) {
if (attr instanceof DpiAttr) {//获取DpiAttr
dpiAttr = (DpiAttr) attr;
floderAttr = dpiAttr.getFloderAttr();
break;//////////////////////////注意此处
} else if (attr instanceof FilesAttr) {//获取FilesAttr
filesAttr = (FilesAttr) attr;
}
}

if (null == dpiAttr) {
dpiAttr = DpiModelFactory.eINSTANCE.createDpiAttr();
traffic.getAttrs().add(dpiAttr);
}

if (null == floderAttr) {
floderAttr = DpiModelFactory.eINSTANCE.createFloderAttr();
dpiAttr.setFloderAttr(floderAttr);
}

if (null == filesAttr) {
filesAttr = ModelFactory.eINSTANCE.createFilesAttr();
traffic.getAttrs().add(filesAttr);
}


initData();
}

我在if中加了break将有什么样的严重后果 请大家帮我分析下
...全文
5791 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
我真的很懒 2011-11-09
  • 打赏
  • 举报
回复
各楼已将答案说的很完整,已没其他可补充的了!!!
funfenffun 2011-11-09
  • 打赏
  • 举报
回复
lz,各位大大已经说得很清楚了。。。
funfenffun 2011-11-09
  • 打赏
  • 举报
回复

//最主要影响这块,用了break的话可能只遍历了前面一部分,抛弃了后面一部分,
//前面没attr instanceof FilesAttr的话,就null == filesAttr,后面有也没用
if (null == filesAttr) {
filesAttr = ModelFactory.eINSTANCE.createFilesAttr();
traffic.getAttrs().add(filesAttr);
}
//另外2个if就影响一下值而已
qybao 2011-11-09
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 yanyuegongzuoshi 的回复:]
此break会跳出此for循环,但并不像9楼所说if (null == filesAttr)一定成立,因为可能在退出循环前的某次循环中filesAttr已经有值了
[/Quote]
我没说一定成立啊,只是说会导致它成立,因为也有可能先进入else if
如果不先进入else if,就会导致它成立
b97672y 2011-11-09
  • 打赏
  • 举报
回复
大家请注意 我for循环后面还有三个if 是跟for循环中的 if相关的 请帮我分析这后面对这三个if的影响
beannian 2011-11-09
  • 打赏
  • 举报
回复
此break会跳出此for循环,但并不像9楼所说if (null == filesAttr)一定成立,因为可能在退出循环前的某次循环中filesAttr已经有值了
funfenffun 2011-11-09
  • 打赏
  • 举报
回复

//加不加break的区别就是,
//加了break,找到第一个DpiAttr类型的attr,就赋值,跳出for循环,
//这时如果之前遍历的值里没有FilesAttr类型的attr,那么第二个if就没有执行过,即使没有遍历的部分里面有值能满足条件也没用
//不加break,就要全部遍历,第一个if里的最后的赋值是找到最后那个DpiAttr类型的attr时做的,
//第二个if里的最后的赋值是找到最后那个FilesAttr类型的attr时做的
for (IAttribute attr : traffic.getAttrs()) {
if (attr instanceof DpiAttr) {//获取DpiAttr
dpiAttr = (DpiAttr) attr;
floderAttr = dpiAttr.getFloderAttr();
break;//////////////////////////注意此处
} else if (attr instanceof FilesAttr) {//获取FilesAttr
filesAttr = (FilesAttr) attr;
}
}


xiaoqiuwyh 2011-11-09
  • 打赏
  • 举报
回复
break的作用就是跳出循环。在你这里,就是在第一次进入if后,执行完这一块就会跳出循环了,就不会执行else if的内容这一段,也不会再循环后面的内容。
b97672y 2011-11-09
  • 打赏
  • 举报
回复
大家请注意 我for循环后面还有三个if 是跟for循环中的 if相关的 请帮我分析这后面对这三个if的影响
qybao 2011-11-09
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 b97672y 的回复:]
我关心的事对后面的代码所产生的严重影响 请帮我分析
[/Quote]
影响就是,如果你找到dpiAttr和floderAttr就break,那么就不会再查找filesAttr了,所以会导致后面的
if (null == filesAttr)成立
艳沐石 2011-11-09
  • 打赏
  • 举报
回复

for (IAttribute attr : traffic.getAttrs()) {
if (attr instanceof DpiAttr) {//获取DpiAttr
dpiAttr = (DpiAttr) attr;
floderAttr = dpiAttr.getFloderAttr();
break;//////////////////////////注意此处
} else if (attr instanceof FilesAttr) {//获取FilesAttr
filesAttr = (FilesAttr) attr;
}
}


从目前代理看,它完成的是,当你找到 traffic.getAttrs()的一个属于DpiAttr类型的对象的时候,将它转型,记录它的dpiAttr.getFloderAttr()属性,然后就不再遍历traffic.getAttrs()了。
b97672y 2011-11-09
  • 打赏
  • 举报
回复
我关心的事对后面的代码所产生的严重影响 请帮我分析
LPZLSDJF 2011-11-09
  • 打赏
  • 举报
回复
对的 break 只是跳出循环,在if里面并不能影响break的结束循环操作。
qybao 2011-11-09
  • 打赏
  • 举报
回复
满足if条件,则退出循环
一般if都是判断要查找的目标,如果找到了目标,后面就不需要再查找了,所以就break退出循环
programmerxiaocai 2011-11-09
  • 打赏
  • 举报
回复
楼上都是正解
fyswords 2011-11-09
  • 打赏
  • 举报
回复
跳出for循环,继续执行for循环后面的代码
yujinjin9 2011-11-09
  • 打赏
  • 举报
回复
中断当前最近的一个for循环
funfenffun 2011-11-09
  • 打赏
  • 举报
回复
跳出for循环,和在if外面加一样的
b97672y 2011-11-09
  • 打赏
  • 举报
回复
17楼说的才是我想要听的答案 分我给你了啊!

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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