首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java为什么我的for循环在i为4之后将i设置为0?

在Java中,for循环的执行过程是按照指定的条件进行迭代的。当循环条件满足时,循环体会被执行,然后再次检查循环条件是否满足,如果满足则再次执行循环体,以此类推。

根据你的描述,如果在循环体中将变量i设置为0,那么循环条件可能会在i为4之后重新满足,导致循环继续执行。这可能是因为你在循环体中对i进行了重新赋值的操作,导致循环条件重新满足。

为了解决这个问题,你可以检查循环体中是否有对i的重新赋值操作,或者使用其他变量来控制循环的执行。另外,你也可以使用debug工具来跟踪代码执行过程,以便更好地理解循环的执行流程。

关于Java的for循环,你可以参考以下链接了解更多信息:

请注意,以上答案仅供参考,具体情况还需根据实际代码进行分析。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

2023-05-22:给定一个长度 n 字符串 s ,其中 s 是: D 意味着减少; I 意味着增加。 有效排列 是对有 n + 1 个 [0,

4.否则 si-1 等于 'I',则循环从 less 到 n-i 枚举下一个数 nextLess,并将结果加到 ans 上。每次递归调用时 i 增加 1,并更新 less nextLess。...算法2:动态规划1.定义二维数组 dp,其中 dpi 表示i 个位置填入数字 j 情况下满足条件排列数量。2.初始化 dpn 1,表示最后一个位置填入 less 数量只有一种。...如果 si-1 等于 'D',则循环0 到 less - 1 枚举下一个数字大小, dpi 增加上 dpi+1,最后取模。...4.如果 si-1 等于 'I',则循环从 less 到 n-i 枚举下一个数字大小, dpi 增加上 dpi+1,最后取模。5.最终答案 dp0。...5.循环中记录当前已经累计和 sum,然后 dpi 值更新 sum,同时需要考虑取模问题。

44100

Java 虚拟机:JVM是如何实现反射

为了观察这个过程,刚才例子更改为下面的 v1 版本。它会将反射调用循环 20 次。...为了比较直接调用和反射调用性能差距,前面的例子改为下面的 v2 版本。它会将反射调用循环二十亿次。此外,它还将记录下每跑一亿次时间。 取最后五个记录平均值,作为预热后峰值性能。...这是为什么呢? 如果你在上一步解决了自动装箱之后查看运行时 GC 状况,你会发现这段程序并不会触发 GC。...此外,每次反射调用都会检查目标方法权限,而这个检查同样可以 Java 代码里关闭,关闭了这两项机制之后,也就得到了我们 v4 版本,它测得结果约为基准 1.3 倍。...除此之外,我们还可以提高 Java 虚拟机关于每个调用能够记录类型数目(对应虚拟机参数 -XX:TypeProfileWidth,默认值 2,这里设置 3)。

1.4K40

JavaScript面试题补充(6---10)

原因是for循环完成后,变量i值等于节点列表长度。此外,因为i代码添加处理程序作用域中,该变量属于处理程序闭包。...; console.log(4); } printing(); 答案 输出结果: 1 4 3 2 想知道为什么输出顺序是这样,你需要弄了解setTimeout()做了什么,以及浏览器事件循环原理...因此,当调用setTimeout()函数时,即使延迟时间被设置0,提供回调也会被排队。回调会呆在队列中,直到指定时间用完后,引擎开始执行动作(如果它在当前不执行其他动作)。...然后,剩下了“2”,“3”,两者都被排队,但是前者需要等待一秒,后者等待0秒(这意味着引擎完成前两个输出之后马上进行)。这就解释了为什么“3”“2”之前。...再则,如果一个数字不能被2整除,那么它不能被4,6,8等整除。因此,你循环必须跳过这些数字。如果你测试输入偶数,你算法慢2倍(你测试双倍数字)。

80230

一个困扰122天技术问题,好像知道答案了。

这个程序意思就是定义一个 boolean 型 flag 并设置 false。主线程一直循环,直到 flag 变为 true。 而 flag 什么时候变为 true 呢?...书里面说:也许你可能期望这个程序运行大概一秒钟左右,之后主线程 stopRequested 设置 true,致使后台线程循环停止。...(所以有同步操作) 因此,如果使用 System.out.println, JVM 无法循环期间缓存变量。 这就是为什么,当有 print 语句时,循环可以正常结束,尽管这不是一个正确操作。...编译器不必调用 Thread.sleep 之前缓存在寄存器中写刷新到共享内存,也不必调用 Thread.sleep 之后重新加载缓存在寄存器中值。...这个程序再稍稍一变: ? 注释掉了第九行,第21行加入 Integer i=0。 是的,它也运行结束了。只是需要一点时间。i = -2147483648 时候。

88610

Java程序员面试之HashMap

介绍 JAVA基础HashMap在工作中使用频率极高。相信很多同学平时面试时候经常被问到晕,今天我们来聊一下HashMap中常见面试题吧!...java1.7中HashMap是由数组+链表组成。1.8之后加了红黑树。 当链表大于8并且容量超过64时。链表就会变成红黑树。 如图所示: ?...Hashtable不允许出现key和值null,但是HashMap允许。 为什么HashMap线程不安全?接下来用代码给大家演示下情况: ?...为什么是0.75是因为官方说是处于性能考虑所以默认设置成0.75。 HashMap中有三个重要方法:新增,查询,扩容。...当 t1 重新获得执行权之后,先执行 newTalbe[i] = e 把 key(3) next 设置 key(7),而下次循环时查询到 key(7) next 元素 key(3),于是就形成了

28820

16-RabbitMQ高级特性-消费端消息ACK与重回队列

ACK保障消费端消费成功 消费端重回队列 消费端重回队列是为了对没有处理成功消息, 把消息重新会递给Broker 一般我们实际应用中, 都会关闭重回队列, 也就是设置FALSE 为什么不使用重回队列功能呢..., 因为消息重回队列会加入到队列尾部, 也会造成一条甚至大量消息一直重复投递队列中死循环 说道这里, 其实是真实碰到过, 当时正是双11, 我们失败策略就是用重回队列, 导致有大量消息一直因为业务异常...{ //throw new RuntimeException("异常"); // 设置false表示关闭重回队列...channel.basicNack(envelope.getDeliveryTag(), false, false); // 设置...test001"; RabbitMQHelper.queueDeclare(channel, queueName, true); for (int i = 0; i <

37720

JAVA拾遗 — JMH与8个代码陷阱

,常数表示式中仅仅代表一个简单数值,就像是整数 2,若是一个变数从未被修改也可作为常数,或者直接一个变数被明确地被标注常数,例如下面的描述: i = 320 * 200 * 32; 多数现代编译器不会真的产生两个乘法指令再将结果储存下来... JIT,OSR,循环展开等因素多重作用下,多次迭代耗时理论值 ?? ns, 其中 ? ∈ [0; +∞)。...c1 竟然耗时最低,认知中,JIT 起码会启动预热作用,无论如何都不可能先运行方法比之后方法快这么多!...所以没有特殊原因,Fork 值一般都需要设置 >0。...由于上述两个图都是从 Aleksey 视频中抠出来,并不清楚他实际测试用例,对于 2 -> 4 线程性能差距并不大只能理解系统过载,按道理说 4机器,运行 4 个线程应该不至于只比 2

1.5K40

MyBatis 批量插入数据 3 种方法!

为什么要分批执行,而不是一次执行?别着急,当我们看了第 3 种实现方法之后我们就明白了。...SQL(大小) 4M,所以程序就报错了。 ​...这就是原生批量插入方法缺点,也是为什么 MP 需要分批执行原因,就是为了防止程序执行时,因为触发了数据库最大执行 SQL 而导致程序执行报错。...解决方案 当然我们也可以通过设置 MySQL 最大执行 SQL 来解决报错问题,设置命令如下: -- 设置最大执行 SQL 10M set global max_allowed_packet=10...当我们 MySQL 最大执行 SQL 设置 10M 之后,运行以上单元测试代码,执行结果如下: 总结 本文我们介绍了 MyBatis 批量插入 3 种方法,其中循环单次插入性能最低,也是最不可取

3.6K10

Java并发指南13:Java HashMap 和 ConcurrentHashMap 全解析

这个值可以初始化时候设置其他值,但是一旦初始化以后,它是不可以扩容。...没搞懂这里为什么要搞一个 while 循环,CAS 失败不就代表有其他线程成功了吗,为什么要再进行判断?... sizeCtl 设置 (rs << RESIZE_STAMP_SHIFT) + 2) // 是没看懂这个值真正意义是什么?...sizeCtl 值操作,首先将其设置一个负数,然后执行 transfer(tab, null),再下一个循环 sizeCtl 加 1,并执行 transfer(tab, nt),之后可能是继续...发现很多人都以为写博客主要是源码分析,说真的,对于源码分析没有那么大热情,主要都是为了用源码说事罢了,可能之后文章还是会有比较多源码分析成分。

52320

走进 JDK 之 Integer

文中相关源码: Integer.java 这几天会转载一些之前账号上文章,最新原创文章也正在准备中,敬请期待。 另外,现在有留言功能了,留言区留下你足迹吧!...关于 不可变类 详细介绍,可以阅读之前一篇文章 《String 为什么不可变?》。...我们都知道 int 是 4 字节,32 比特,和 C/C++ 不同时,Java 中整型取值范围和运行 Java 代码机器是无关。...以 parseInt("1234",10) 例: 1234 = (((1*10)+2)*10+3)*10+4 实际上并不是这样循环累加,而是用负数累减形式。...: i 二进制补码循环右移 distance(注意与普通右移不同是,右移数字会移到最左边) int rotateLeft(int i, int distance) : 与 rotateRight

74720

数据结构思维 第四章 `LinkedList`

循环变量i0计数到size-1。每次循环中,我们都用equals来看看我们是否找到了目标。如果是这样,我们立即返回i。否则我们移动到列表中下一个Node。...循环可能运行n次,因为更糟情况下,我们可能必须遍历整个列表。 所以这个方法运行时间与列表长度成正比。 接下来,这里是双参数add方法实现。同样,你应该尝试对其进行划分,然后再阅读说明。...这就是为什么 Java 提供了多个实现,因为它取决于你。 4.3 性能分析 对于下一个练习,提供了一个Profiler类,它包含代码,使用一系列问题规模运行方法,测量运行时间和绘制结果。...如果接近2,它可能是平方。 4.5 练习 4 本书仓库中,你找到此练习所需源文件: Profiler.java包含上述Profiler类实现。你会使用这个类,但你不必知道它如何工作。...此外,code目录中,你找到 Ant 构建文件build.xml。 运行ant ProfileListAdd来运行ProfileListAdd.java

28720

请介绍下你了解ThreadLocal,它底层原理!@#¥%& ......

private int size = 0; // 扩容阈值 private int threshold; // Default to 0 // 设置阀值长度 2/3...= i; // 清除掉过期 expungeStaleEntry(slotToExpunge) 会清除 entryvalue,将其设置null并将其设置null, 并返回下一个需要清除...向后扫描没有扫描到,则直接对当前节点(索引值 staleSlot )节点 value 设置 null,并指向新 value。...循环查找数组,当前 key Entry 引用, value 设置 null, 后面会被垃圾回收掉。 3 总结 为什么可以线程私有?...为什么建议声明为静态? Java开发手册已经给出说明,还有就是,如果 ThreadLocal 设置非静态,那就是某个线程实例类,这样的话就会失去了线程共享本质属性。

48520

Stack Overflow上59万浏览量提问:为什么会发生ArrayIndexOutOfBoundsException?

这样看似简单到不值得一问问题,访问量足足有 69万+,这不得了啊!说明有不少初级程序员被这个问题困扰过。实话实说吧,也有点吃不准为什么。...(names[i]); } 当 i 4 时候要跳出 for 循环,names 最大下标值 3 而不是 4。...Java 下标都是从 0 开始编号不确定有没有从 1 开始编程语言),这和我们平常生活中从 1 开始编号习惯不同。...实际上,Java 会把增强 for 循环语句解释普通 for 循环语句,仍然会使用下标。...0,var3 数组长度;当 var4 自增长 4 时候,发现 var4 不小于 var3,于是循环退出。

61630

笨办法学 Java(四)

然后第 38 行,我们设置循环来查看数组每个槽。然而,请注意,循环从索引1(第二个槽)开始。为什么? 因为 max 已经是0。...因此,当循环结束时,max包含具有最高 GPA 记录索引。这正是我们第 42 行显示内容。 学习演练 数组容量更改为4而不是 3。不改变任何其他内容,编译并运行程序。...第 34 行定义了我们 52 张卡片数组(从 0 到 51 索引)。 第 36 行是另一个 foreach 循环。变量 s 将被设置"clubs",然后 “方块”,然后“红心”,最后“黑桃”。...第 41 行,我们这张卡花色字段设置当前 s 中任何值(一开始是"clubs")。...第 112 行,我们首先将这个房间描述字段设置空字符串。这样我们就可以不出错情况下添加内容。(就像我们循环中将“总数”变量设置0一样,然后再进行累加。) 好吧。喜欢写无限循环。告吧。

8410

Go和Java性能对比,真的如此吗?

变量,这个变量并没有for循环中定义,而是for循环外定义for循环里面不断被重新赋值。...var arr []int const NUM int = 100000000 for i := 0; i < NUM; i++ { arr = []int{1, 2, 3, 4, 5, 6, 7...:= []int{1, 2, 3, 4, 5, 6, 7, 8, 9} bubbleSort(arr) } 完成之后,我们再次测试,结果如下,这下心里稍微平衡一点了,要不然一直热爱Go语言竟然性能如此之差...事实上,如果你再深入一下,你对Java和Gofor循环次数调整一下,比如都调整循环一千次,你再比较结果,你会发现Go性能比Java好,为什么呢?...网上也有很多实验来说明Go性能是Java好几倍,希望你见到时好好思考一下,这个测试是客观吗?为什么会出现这个意料之外结果?

1.3K20

volatile关键字作用

vt.flag被设置true,所以vt线程进行下一次while判断 while (!...之后由于变量被设置成true,导致线程退出->进程退出 实际执行结果:可是奇怪事情发生了 程序并没有退出。vt线程仍然在运行,也就是说我们主线程设置 vt.flag = true;没有起作用。...如果显示Java HotSpot(TM) … Client 客户端模式,需要设置成Server模式 设置方法问Google 问题出现了,为什么主线程(main)中设置了vt.flag = true...首先 vt线程在运行时候会把 变量 flag 与 i (代码3,4行)从“主内存” 拷贝到 线程栈内存(上图线程工作内存) 然后 vt线程开始执行while循环 while (!...这就解释了为什么主线程(main)中设置了vt.flag = true; 而vt线程进行判断flag时候拿到仍然是false。

2.9K20

ThreadLocal原理及源码解析(一步一步点进去,不要背了,学思想)

4Value为什么不用弱引用 怎么解决hash冲突 1ThreadLocal使用 我们知道,一个共享变量或者资源,多个线程操作时候,肯定是会相互影响,不能隔离 public class AtomicTest...1); //同一个keyget.set之后,e不为null,进入for循环 for (Entry e = tab[i]; e !...//slotToExpunge5 int slotToExpunge = staleSlot; //向数组前面轮询找 找到一个nullentry为止 假如下标4entrynull,跳出循环...Entry value设置null value就可以被GC回收了 //传进来下标位置Entry设置null 清理空间 tab[staleSlot].value = null; tab[staleSlot...4Value为什么不用弱引用 是因为不清楚这个Value 除了map 引用还是否还存在其他引用,如果不存在其他引用,当GC 时候就会直接这个Value干掉了,而此时我们ThreadLocal还处于使用期间

38741
领券