易截截图软件、单文件、免安装、纯绿色、仅160KB

Java解惑2 25无情的增量操作

下面的程序对一个变量重复地进行增量操作,然后打印它的值。那么这个值是什么呢?
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。毕竟,它对j做了100次增量操作。可能会令你感到有些震惊,它打印的不是100而是0。所有的增量操作都无影无踪了,为什么?
就像本谜题的题目所暗示的,问题出在了执行增量操作的语句上:
j = j++;
大概该语句的作者是想让它执行对j的值加1的操作,也就是表达式j++所做的操作。遗憾的是,作者大咧咧地将这个表达式的值有赋回给了j。
当++操作符被置于一个变量值之后时,其作用就是一个后缀增量操作符(postfix increment operator)[JLS 15.14.2]:表达式j++的值等于j在执行增量操作之前的初始值。因此,前面提到的赋值语句首先保存j的值,然后将j设置为其值加1,最后将j复位到它的初始值。换句话说,这个赋值操作等价于下面的语句序列:
int tmp = j;
j = j + 1;
j = tmp?;
程序重复该过程100次,之后j的值还是等于它在循环开始之前的值,即0。
订正该程序非常简单,只需从循环中移除无关的赋值操作,只留下:
for (int i = 0; i < 100; i++)
j++;
经过这样的修改,程序就可以打印出我们所期望的100了。
这与谜题7中的教训相同:不要在单个的表达式中对相同的变量赋值超过一次。对相同的变量进行多次赋值的表达式会产生混淆,并且很少能够产生你希望的行为。


相关文档:

Java中内部类的调用

class EnclosingOne {
public class InsideOne {
}
}
public class B {

public static void main(String[] args) {
EnclosingOne eo = new EnclosingOne();
EnclosingOne.InsideOne ei = eo.new InsideOne();
}

} ......

JAVA 静态变量与静态方法

java中静态变量和静态方法分别有什么特点?
悬赏分:0 - 解决时间:2006-4-10 10:28

提问者: vv_clear - 二级
最佳答案
为什么问了两次?再贴上另一篇
Thinking:Java中static用法- -
Tag: Thinking:Java中s
一、static
请先看下面这段程序:
public class ......

Linux下java环境变量设置方法

转贴:
现在用linux的朋友越来越多了,前几天就有两个朋友问我linux下怎么配置java环境,我想还有很多朋友想了解学习这方面的东西,就写一个完全一点的linux java环境配置吧,希望对大家有帮助。
一. 下载jdk5.0 for linux
  到sun的主页 http://java.sun.com/j2se/1.5.0/download.jsp 下载jdk安装文件jdk-1_5_0_05-li ......

【转载】Java/Hibernate/标准SQL 数据类型对应表


Java数据类型
Hibernate数据类型
标准SQL数据类型
(PS:对于不同的DB可能有所差异)
byte、java.lang.Byte
byte
TINYINT
short、java.lang.Short
short
SMALLINT
int、java.lang.Integer
integer
INGEGER
long、java.lang.Long
long
BIGINT
float、java.lang.Float
float
FLOAT
double、java.lang.Doubl ......

Java解惑2 23不劳无获

下面的程序将打印一个单词,其第一个字母是由一个随机数生成器来选择的。请描述该程序的行为:
import java.util.Random;
public class Rhymes {
private static Random rnd = new Random();
public static void main(String[] args) {
StringBuffer word = null;
switch(rnd.nextInt(2)) {
......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号