[转]http://blog.sina.com.cn/s/blog_605f5b4f0100khy0.html
学习过一门计算机语言的人一定知道j=i++的运算结果,整个表达式的值为i,而i的值变为i+1;那么i=i++又是一个什么情况呢?下面分别用java 和 c 两种语言来做个测试:
JAVA:
public class test
{
public static void main(String args[])
{
inti,j;
i=0;
for(j=0;j<5;j++)
{
i=i++;
System.out.println("i="+i);
}
}
}
C:
#include
main()
{
inti,j;
i=0;
for(j=0;j<5;j++)
{
i=i++;
printf("i=%d\n",i);
}
}
你也许会问,这么简单的程序会有什么问题呢?是的,如果不相信的话,你可以运行一下这两个程序,得到的结果非常让人震惊。
第一个JAVA程序得出的结果如下:
i=0
i=0
i=0
i=0
i=0
而第二个C程序得出的结果如下:
i=1
i=2
i=3
i=4
i=5
同样都是i=i++,为什么得出的结果会有这么大的差异呢?原来是在编译器上出了问题,java的编译器在遇到i++和i- -的时候会重新为变量运算分配一块内存空间,以存放原始的值,而在完成了赋值运算之后,将这块内存释放掉,下面首先看一下如果是j=i++的情况:
i的原始值存放在后开辟的内存中,最后这个值将赋值给j,这样j=i++后,j就会得到i的值,而i又将自加,所以,在释放内存之后,原来存放j和i的地方将得到值将是:j(此时的值等于初始i值)和i(i自加后的值)。
明白了上面的问题,让我们接下来看看i=i++的情况:
所以这样最后一次循环内的结果仍旧是i(即0)。
而C语言中的i=i++就只是完成i++的内容,所以结论会不同。这种情况说明java和c的处理语法的机制不同,如果在程序中只输入i++就不会出现这个方面的问题,所以大家在以后的程序中如果使用到i=i++的时候要格外小心,一般只需要用i++就不会有问题了。
- 大小: 21.9 KB
- 大小: 21.1 KB
分享到:
相关推荐
为了避免无限循环的发生,正确的做法是直接使用`i++`或者`i += 1`来更新循环变量: ```java public class Test { public static void main(String[] args) { for (int i = 0; i <= 10; i++) { System.out.print...
8. **Java I/O与NIO**:学习传统的I/O流以及Java NIO(New IO)框架,提供非阻塞I/O操作。 9. **反射与注解**:了解如何在运行时动态获取类信息,以及注解的使用和自定义注解。 在认证参考部分,可能涉及以下内容:...
i++) { triangle[i] = new int[i + 1]; triangle[i][0] = triangle[i][i] = 1; // 计算中间的数字 for (int j = 1; j < i; j++) { triangle[i][j] = triangle[i - 1][j - 1] + triangle[i - 1][j]; } } ...
说明文档则可能对01背包问题的背景、动态规划的原理、代码实现的逻辑进行详细解释,同时提供示例来帮助理解。它可能还会包括如何运行和测试代码,以及可能的输出结果和其含义。 通过这个作业,学生可以深入理解01...
Java图片滑动验证(登录验证)原理与实现方法详解 Java图片滑动验证(登录验证)是一种常用的身份验证机制,它可以有效地防止机器人和恶意攻击。下面将详细介绍Java图片滑动验证(登录验证)的原理和实现方法。 ...
《深入分析Java++Web技术内幕...同时,提供的"Linux公社.png"可能是相关社区或资源的标识,"教程重要说明及更新链接点击这个文本.txt"则可能包含重要提示和更新信息,读者应当仔细阅读,以充分利用这份宝贵的教育资源。
八种排序算法原理及Java实现 排序算法是计算机科学中一种重要的算法,用于对数据进行排序。八种排序算法原理及Java实现是排序算法中的一种,包括冒泡排序、快速排序、直接插入排序、希尔排序、选择排序、归并排序和...
### Java虚拟机(JVM)运作原理 #### 一、引言 Java虚拟机(JVM)作为Java程序的运行环境,对于理解Java程序的行为至关重要。本文将深入探讨JVM的基本概念及其内部工作原理,帮助读者更好地理解Java程序如何在JVM上...
i+=a; \u6c42i`涉及到了变量的初始化、自增操作以及赋值运算。让我们深入理解这段代码的含义及其背后的原理。 首先,`i=3;`这行代码初始化了一个整型变量`i`,并将其值设置为3。这是程序开始执行时`i`的状态。 接...
最后,"36个有关JAVA文档(知识点+程序员不知道的问题及分析+程序员必知要点)"这一资源提供了深入的Java知识点解析,可能包括JVM内存模型、异常处理的最佳实践、设计模式的应用、单元测试的重要性等。这些都是Java...
冒泡排序原理和JAVA实现 冒泡排序是一种比较排序,也称为泡沫排序或沉沦排序。它的工作原理是通过重复地走访过要排序的数列,依次比较相邻的两个元素,如果他们的顺序错误就把他们交换过来,直到没有再需要交换的...
3. 面试问题:如Java内存模型、JVM调优、线程同步原语(synchronized, volatile, Lock等)、集合框架的深入理解。 4. Java核心技术:如反射、泛型、枚举、注解等。 5. 高级话题:如JVM内存结构、垃圾回收机制、类...
《Java程序员+上班那点事儿》可能会提供一系列的面试策略,如如何准备常见的Java面试问题,比如JVM工作原理、垃圾回收机制、设计模式的应用等。书中还可能分享如何应对技术面试中的算法题,比如排序算法、查找算法...
- **Java I/O教程**:理解文件读写操作的原理和方法。 通过研究这个Java记事本的源代码,初学者可以了解如何将理论知识应用于实际项目,加深对Java GUI编程的理解,为后续的Java Web或Java EE开发打下坚实基础。...
在Java中,多线程允许同时执行多个代码段,从而提高程序的执行效率,特别是在处理I/O密集型或计算密集型任务时。同步机制则用于在多线程环境下控制资源的访问,确保数据的一致性和完整性。 一、Java多线程 1. **...
在Java中,自增运算符(++)有两种用法:前缀形式(++i)和后缀形式(i++)。这两种形式在语义上有所差异,主要体现在返回值和变量更新的时间点上。 1. 前缀形式(++i):首先将i的值增加1,然后返回增加后的值。...
根据提供的文件信息,我们可以深入探讨Java反射机制的基本原理及其应用场景。 ### Java反射机制的基本概念 Java反射机制允许程序在运行时获取类的信息,并且能够直接操作这些信息。这包括类名、方法名称、参数类型...
在Java编程环境中,I/O(输入/输出)操作是程序与外部世界交互的关键部分,包括读取文件、网络通信等。对于高效的系统设计,理解并掌握阻塞I/O和非阻塞I/O是非常重要的。这两种I/O模型在处理数据传输时有着显著的...
i++) { sb.append(chars.charAt(random.nextInt(chars.length()))); } return sb.toString(); } ``` 2. **图像创建**:生成的随机字符串需要转化为图形表示。JAVA的`Graphics2D`和`BufferedImage`类可以用来...