Java自增问题(易错)
来源:互联网 发布:苹果7蜂窝移动数据设置 编辑:程序博客网 时间:2024/06/06 20:35
首先贴段代码:
package kaoshi;import java.util.Arrays;public class Main6 { public static void main(String[] args) { int x[]=new int[7]; String string=new String(); string="1234567890"; int i=0; while(i<7) { x[i++]=Integer.parseInt(String.valueOf(string.charAt(i))); } System.out.println(Arrays.toString(x)); }}
亲们,觉得上面语句执行后
x中的值是怎样的?
想知道结果首先就需要搞懂这句代码是怎么执行的
x[i++]=Integer.parseInt(String.valueOf(s1.charAt(i)));
通常我们会这样想:
初始i=0;
(1)第一次:x[0]=1;更新i的值,i=1
(2)第二次:x[1]=2;更新i的值,i=2
……
依次类推,最终得到
x={1,2,3,4,5,6,7}
结果真是这样的吗?
实际发现运行输入的竟然是:
x={2,3,4,5,6,7,8}
为什么会这样呢?
下面来看看编译器的运行过程:
源代码:
反编译后的代码(部分):
16 iconst_0 : 即i=0;
17 istore_3 [i]:存储i
18 goto 38 (跳转到38执行)
21 aload_1 [x] : 取x
22 iload_3 [i] : 取i
23 iinc 3 1 [i] :i执行自增操作,
26 aload_2 [string]
27 iload_3 [i]
28 invokevirtual java.lang.String.charAt(int) : char [21]
31 invokestatic java.lang.String.valueOf(char) : java.lang.String [25]
34 invokestatic java.lang.Integer.parseInt(java.lang.String) : int [29]
37 iastore
38 iload_3 [i]
39 bipush 7
41 if_icmplt 21
看到了吗?
编译器是先执行x[i]
然后i++;接着才是Integer.parseInt(String.valueOf(string.charAt(i))),即此时从字符串中取出的不是第i个字符,而是它的下一个(即i+1编号)字符,
故x[0]=Integer.parseInt(String.valueOf(string.charAt(1)));
x[1]=Integer.parseInt(String.valueOf(string.charAt(2)));
….
依次类推就得到了上面编译器运行出的结果。`
- Java自增问题(易错)
- java基础-自增问题
- 【java解惑】前缀自增自减和后缀自增自减问题
- Java自增原子性问题(测试Volatile、AtomicInteger)
- Java自增原子性问题(测试Volatile、AtomicInteger)
- java运算符中自增和自减问题
- java中的变量自增问题
- Java自增问题:x=x++
- java基础(自增、自减)
- 自增自减问题
- 自增自减问题
- java自增自减
- java自增自减
- java自增自减
- 关于java中的自增运算符的老问题
- java基础 int变量自增 效率问题
- java☞自增自减运算符(++)(--)
- java中有关自增(++)自减(--)
- unity中mathf.Lerp的运用
- SEO新手必备:SEO名词定义汇总
- 【Java】使用iText生成PDF文件
- 成为Google认证机器学习工程师,零基础也只需要2步!
- eclipse tomcat启动报错:Could not open/create prefs root node Software\JavaSoft\P
- Java自增问题(易错)
- input输入框只能输入数字,只能输入字母数字组合
- Select2插件的使用(绑定数据源)
- ps cs6调油画效果教程
- windows10下使用idea远程调试hadoop集群
- 用Word编辑一个长文档时如何有层次感让文字看起来有条理性
- SDWebImage加载图片添加淡入淡出动画
- 《深入理解Java虚拟机》读书笔记
- Leetcode题解-561. Array Partition I