下面的程序对一个变量重复的进行增量操作,然后打印它的值,那么打印输出是什么?
Java代码
public class Increment{
public static void main(String[] args){
int j=0;
for(int i=0;i<100;i++){
j = j++;
}
System.out.println(j);
}
}
乍一看,这个程序输出是100,但实际运行后,输出为0.
问题就是在增量操作的语句上:
Java代码
j = j++;
当++操作符被置于一个变量值之后,其作用是一个后缀增量操作符:表达式j++的值等于j在执行增量操作之前的初始值,因此,这个语句首先保存j的值,然后将j设置为其值加一,最后将j复位到它的初始值,换句话说,这个赋值操作等价于下面的语句序列:
Java代码
int tmp = j;
j = j + 1;
j = tmp;
程序重复100次之后,j的值还是等于它在循环之前的值,即0;
修正这个程序只需从循环中移除无关的赋值操作,只留下:
Java代码
for(int i=0;i<100;i++){
j++;
}
不要在单个的表达式中对相同的变量赋值超过一次。
分享到:
相关推荐
1. **找奇数陷阱**:当试图找出数字是否为奇数时,可能忽略了一些边界条件,比如0的情况。 2. **浮点数相减陷阱**:浮点数运算由于精度问题可能会导致非预期的结果,需要谨慎处理。 3. **长整除陷阱**:使用整数除...
- 这段Java代码涉及预增量和后增量操作符,其结果取决于运算符的顺序。然而,题目标签是Python,所以这部分不直接相关,但在Java中,这段代码的结果是`i=6`,`j=6`。 6. **RESTful API操作**: - 使用Python的`...
1. 网络爬虫的基本概念和应用领域。 2. 网络爬虫面对的挑战,包括技术挑战和理论问题。 3. 爬虫架构的设计要素,如数据结构管理、内容源的更新频率等。 4. 网页排序模型、网页特性和爬取策略分类。 5. 批量和增量...
"利用 Ant 和 JUnit 进行增量开发.ziw"这部分内容会介绍如何结合ANT与JUnit进行单元测试和持续集成,这对于Java项目的质量管理至关重要。增量开发意味着只编译和测试自上次构建以来修改过的部分,提高了开发效率。 ...
此外,书中还讨论了软件估算的挑战,强调了软件开发过程中的不确定性,并提倡采用迭代和增量的开发方式。布鲁克斯提倡的这些观念对敏捷开发和精益软件开发等现代实践有着深远的影响。 总的来说,《人月夜话》是一本...
1. 分代(Generational)垃圾回收:它是一种普遍使用的回收技术,通过假定对象的生命周期有长有短,将对象分为不同代(年轻代、老年代等),然后根据对象的存活时间采用不同的回收策略。 2. 并行(Parallel)垃圾...
1. **Gradle DSL (Domain Specific Language)**:Gradle使用Groovy或Kotlin作为其构建脚本语言,提供了灵活的DSL,允许开发者自定义构建过程。通过这个DSL,你可以定义项目依赖、任务、属性和插件。 2. **依赖管理*...
1. **用UML设计Java应用程序** 这部分介绍了如何运用统一建模语言(UML)进行Java应用程序的设计。UML是一种标准的可视化建模语言,用于软件工程中,帮助开发者理解和表达系统的架构、行为和交互。通过案例学习,...