摘要:
这个谜题要问的是一个悦耳的问题,下面的程序将打印什么呢? 可能大家希望这个程序打印出ABC easy as 123。遗憾的是,它没有。如果你运行它,就会发现它打印的是诸如ABC easy as [C@16f0472之类的东西。为什么这个输出会如此丑陋? 尽管char是一个整数类型,但是许多类库都对其 阅读全文
摘要:
下面的程序将打印出什么呢? 你可能会认为这个程序将打印HaHa。该程序看起来好像是用两种方式连接了H和a,但是你所见为虚。如果你运行这个程序,就会发现它打印的是Ha169。那么,为什么它会产生这样的行为呢? 正如我们所期望的,第一个对System.out.print的调用打印的是Ha:它的参数是表达 阅读全文
摘要:
与上面的例子相反,如果我们给出的关于变量x和i的声明是如下的合法语句: 但是,它并不是: 乍一看,这个谜题可能看起来与前面一个谜题相同。但是请放心,它们并不一样。这两个谜题在哪一条语句必是合法的,以及哪一条语句必是不合法的方面,正好相反。 就像前面的谜题一样,这个谜题也依赖于有关复合赋值操作符的规范 阅读全文
摘要:
这个谜题将测试你对条件操作符的掌握程度,这个操作符有一个更广为人知的名字:问号冒号操作符。下面的程序将会打印出什么呢? 这个程序由两个变量声明和两个print语句构成。第一个print语句计算条件表达式(true ? x : 0)并打印出结果,这个结果是char类型变量x的值’X’。而第二个prin 阅读全文
摘要:
下面的程序使用了复合的异或赋值操作符,它所展示的技术是一种编程习俗。那么它会打印出什么呢? 就像其名称所暗示的,这个程序应该交换变量x和y的值。如果你运行它,就会发现很悲惨,它失败了,打印的是 交换两个变量的最显而易见的方式是使用一个临时变量: 很久以前,当中央处理器只有少数寄存器时,人们发现可以通 阅读全文
摘要:
转型被用来将一个数值从一种类型转换到另一种类型。下面的程序连续使用了三个转型。那么它到底会打印出什么呢? 无论你怎样分析这个程序,都会感到很迷惑。它以int数值-1开始,然后从int转型为byte,之后转型为char,最后转型回int。第一个转型将数值从32位窄化到了8位,第二个转型将数值从8位拓宽 阅读全文
摘要:
下面的程序是对两个十六进制(hex)字面常量进行相加,然后打印出十六进制的结果。这个程序会打印出什么呢? 看起来很明显,该程序应该打印出1cafebabe。毕竟,这确实就是十六进制数字10000000016与cafebabe16的和。该程序使用的是long型运算,它可以支持16位十六进制数,因此运算 阅读全文
摘要:
得啦,前面那个谜题是有点棘手,但它是有关整除的,每个人都知道整除是很麻烦的。那么下面的程序只涉及加法,它又会打印出什么呢? 从表面上看,这像是一个很简单的谜题——简单到不需要纸和笔你就可以解决它。加号的左操作数的各个位是从1到5升序排列的,而右操作数是降序排列的。因此,相应各位的和仍然是常数,程序必 阅读全文
摘要:
这个谜题之所以被称为长整除是因为它所涉及的程序是有关两个long型数值整除的。被除数表示的是一天里的微秒数;而除数表示的是一天里的毫秒数。这个程序会打印出什么呢? 这个谜题看起来相当直观。每天的毫秒数和每天的微秒数都是常量。为清楚起见,它们都被表示成积的形式。每天的微秒数是(24小时/天60分钟/小 阅读全文
摘要:
请考虑下面这段话所描述的问题: Tom在一家汽车配件商店购买了一个价值$1.10的火花塞,但是他钱包中都是两美元一张的钞票。如果他用一张两美元的钞票支付这个火花塞,那么应该找给他多少零钱呢? 下面是一个试图解决上述问题的程序,它会打印出什么呢? 你可能会很天真地期望该程序能够打印出0.90,但是它如 阅读全文