关于for循环控制条件在循环外还是循环内的问题
1、在循环内
public class TestForLength {public static void main(String[] args) {List<String> strs = new ArrayList<String>();strs.add("1");strs.add("2");strs.add("3");strs.add("4");strs.add("5");for (int i = 0; i < getSize(strs); i++) {System.out.println(strs.get(i));}String[] strs2 = {"1","2","3"};for (int i = 0; i < getLength(strs2); i++) {System.out.println(strs2[i]);}}public static int getLength(String[] strs){System.out.println(2222);return strs.length;}public static int getSize(List<String> list){System.out.println(1111);return list.size();}
}
执行结果
获取list的长度
1
获取list的长度
2
获取list的长度
3
获取list的长度
4
获取list的长度
5
获取list的长度
获取数组的长度
1
获取数组的长度
2
获取数组的长度
3
获取数组的长度
结论:每一次循环都会重新获取一次结束条件
1、在循环外
public class TestForLength {public static void main(String[] args) {List<String> strs = new ArrayList<String>();strs.add("1");strs.add("2");strs.add("3");strs.add("4");strs.add("5");int size = getSize(strs);for (int i = 0; i < size; i++) {//i<*,每一次都会执行条件,建议放在循环前System.out.println(strs.get(i));}String[] strs2 = {"1","2","3"};int length = getLength(strs2);for (int i = 0; i < length; i++) {//i<*,每一次都会执行条件,建议放在循环前System.out.println(strs2[i]);}}public static int getLength(String[] strs){System.out.println(2222);return strs.length;}public static int getSize(List<String> list){System.out.println(1111);return list.size();}
}
执行结果
获取list的长度
1
2
3
4
5
获取数组的长度
1
2
3
结论:只获取一次条件
总结:当获取结束条件的语法较为复杂时,每次遍历都需要获取一次条件,则会造成很大的性能浪费,因此,在除了“需要动态获取条件(开发中几乎不存在)”的情况下,都建议先获取结束条件,并且该方法亦可以预防list/数组为空,导致程序异常(如下)
public static void main(String[] args) {List strs3 = getArrayList() ;//解决方案//int size3 = strs3 != null ? strs3.size() : 0//for (int i = 0; i <size3 ; i++) {for (int i = 0; i <strs3.size() ; i++) {//在此行报“java.lang.NullPointerException”异常}
}
public static List<String> getArrayList(){return null;
}
结果:
java.lang.NullPointerExceptionat com.yinghu.app.hjzl.test.TestForLength.main(TestForLength.java:22)
关于for循环控制条件在循环外还是循环内的问题相关推荐
- 循环外和循环内定义变量的区别
一.代码展示 import java.util.HashMap; import java.util.Map;/*** @Package: raymond* @ClassName: Test* @Aut ...
- C++在循环内和循环外定义变量的差异(如何写出高效的for循环)
写这篇文章的原因是我在问答平台看到的一个问题: C++内层循环中定义变量和在外面定义比影响大吗? 问题来自:http://ask.csdn.net/questions/176270 例如: for(i ...
- 5、条件判断语句和while循环语句
条件判断和while循环 条件判断 条件判断语句(if语句) input() 函数 if-else语句 if-elif-else 语句 循环控制 while语句 break和continue whil ...
- 【JAVA SE】第三章 运算符、条件语句、switch结构、while循环、do…while循环、for循环、break关键字以及break和continue关键字
第三章 运算符.条件语句.switch结构.for循环.break关键字以及break和continue关键字 文章目录 第三章 运算符.条件语句.switch结构.for循环.break关键字以及b ...
- C语言 条件判断语句、while循环、switch语句
浮点数 注意事项:整型数字除于整数只会得到整数.如果要想得到浮点数,分母或分子要至少有一个为浮点数. 表达式 一个表达式是一系列运算符和算子的组合,用来计算一个值 运算符(operator)是指进行运 ...
- java 返回值判断_在Java中判断方法重载的条件除了参数外,还可以通过返回值类型判断。_学小易找答案...
[单选题]若int x;且有下面的程序片断,则输出结果是() . for (x=3; x<6; x++) { printf((x%2) ? "##%d" : "** ...
- 汇编语言-013(DAS 、DAA与DAS、QWORD类型用SBB借位减法、编写指令将AX符号扩展到EAX,不能使用CWD、用SHR和条件判断指令将AL循环右移一位、SHLD、压缩十进制转换)
1:DAS : SUB或SBB在AL中生成二进制结果,DAS(减法后的十进制调整)转压缩十进制格式 .386 .model flat,stdcall.stack 4096 ExitProcess PR ...
- python-if条件判断与while/for循环
条件判断if 让计算机像人一样,能判断是非对错,根据条件做一些事情. if ''' ------ if代码结构:------- if 条件:代码体tips:同一缩进范围内的代码被视作同一代码体,pyt ...
- Python学习2 条件判断语句if,循环语句for while
顺序,分支,循环结构 条件判断语句if 1)if-else- 2) if-elif-else 注意: 1)python中不支持switch-case语句 2)注意缩进! 3)区间范围内允许连续比较: ...
最新文章
- 争论不休的TF 2.0与PyTorch,到底现在战局如何了? | 技术头条
- python学习之if条件句的使用
- 单招计算机应用基础试题及答案,对口单招计算机应用基础模拟试题
- STM32F1如何切换到不同的型号
- NotificationManagerService使用详解与原理分析(一)
- jq如何在打开新的页面 关闭之前同链接的页面_教你如何“抢”其他域名的权重...
- python有理数_Python中的as_integer_ratio()用于减少给定有理数的分数
- C#循环 — break VS continue
- C#LeetCode刷题之#67-二进制求和(Add Binary)
- 提高网站性能之 —— 减少图片HTTP 请求的方案
- 微信小程序引入iconfont实现添加自定义颜色图标
- Office批量打印精灵4.2入门教程
- 安卓端airplay实现IOS屏幕镜像
- Slurm的前处理prolog和后处理epilog
- 废旧闲置的笔记本除了电脑回收,这两招也很实用!
- eclipse报错 错误: 找不到或无法加载主类
- 服装ERP软件首要的好处都有哪些?
- kafka集群搭建教程(使用自带的zookeeper)
- Hypermesh案例学习笔记
- FPS 游戏自瞄原理