Java Puzzle

原创 2006年09月27日 23:11:00

今天听Sun的一个技术大会,其中讲到一些Java Puzzle,就是一些大家不常注意到的语法细节。以前一直觉得C++语法复杂,Java简单。其实,只要程序员愿意,一样可以写出晦涩难懂的烂Java程序。

具体题目已经不记得了,这里只能凭记忆写出题的大概。

 

题1:

public class Confusing ...

 问:输出什么?

a) object   b) double array   c) won't compile d) other

答:这个题输出double array。题目中两个构造函数都符合要求,因为null可以是Object,也可以是double[],这时Java会选择类型最匹配的。所以选double array。

 

题2:

public class Number {
    
public static void main(String[] args) 
{
        System.out.println(
2.00 - 1.10
);
    }

}

问:输出什么?

答:输出0.8999999999999999。这个倒是比较常见的问题。浮点数表示是不精确的。

 

题3:

public class X {
    
static public class Y 
{
        
static public String Z = "white"
;
    }

    
    
static C Y;
    
    
public static void main(String[] args) 
{
        System.out.println(X.Y.Z);
    }

}


class C {
    
static public String Z = "black"
;
}

问:输出什么?

a) white b) black c) compile error d) other

答:这个选b。Java中,当名字解析时发现多个匹配的结果时,varible>type>package,所以变量Y的优先级高于类Y,优先。

 

 题4:

public class StringLength {
    
public static void main(String[] args) 
{
        
final String str1 = "length =10"
;
        
final String str2 = "length =" +
 str1.length();
        
        System.out.println(
"result is " + str1 ==
 str2);
    }

}

问:结果如何?

a) result is true   b) result is false   c) won't compile d) other

答:当时很多人在考虑final的string是否会由于编译器优化而使用同一个字符串,以至于==会返回true,争论在a和b。其实这个题目中由于+的优先级高于==,所以先执行字符串连接,得到的字符串再和str2比较,所以结果是输出false

 

题5:

public class compute {
    
public static void main(String[] args) 
{
        
int x = 0
;
        
for (int i = 0; i < 3++i) 
{
            x 
+= x++
;
        }

        
        System.out.println(
"x = " + x);
    }

}

问:输出多少?

答:这个题目输出0,很出人意料。因为+=和++从右往左开始算,等同于x = (x + x++); 先做x+x++,其中x++返回老值0,0+0结果还是0,之后x自增长为1,最后计算结果0赋值给x,x又变成0。所以执行多少次都是0。

这个题目真是变态,上台的8个同学全都答错,没有人能领走iPod shuffle,

 

 

相关文章推荐

java puzzle

  • 2011年12月04日 08:31
  • 39KB
  • 下载

Eleven puzzle_hdu_3095(双向广搜).java

双向广搜

[java puzzles]puzzle:Oddity

The following method purports to determine whether its sole argument is an odd number.Does the metho...
  • sslf
  • sslf
  • 2011年11月16日 21:21
  • 288

Puzzle Kid

  • 2008年12月23日 19:08
  • 276KB
  • 下载

ZOJ 2836 Number Puzzle(容斥原理)

给出1到10的十个数字,要求输出不大于m的数字能被其中任意一个整除的数字有多少个 简单的熔池原理,我们用二进制枚举每个数字的选择情况,然后当选择的数字为奇数时将总数加上m/gcd   偶数时...
  • pootree
  • pootree
  • 2016年04月03日 14:52
  • 140

c语言解惑(the c puzzle book).rar

  • 2009年10月01日 07:45
  • 10.3MB
  • 下载

puzzle游戏参考

  • 2008年01月14日 19:13
  • 304KB
  • 下载

习题3-5 UVa 227 Puzzle

难点: 1.行与列的关系难理清要点: 1.scanf(” %c”,&c),(注意前面的空格)可以跳过换行符等#include #include char map[5][5]; const int ...

Puzzle 拼图

  • 2011年08月13日 08:18
  • 160KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java Puzzle
举报原因:
原因补充:

(最多只允许输入30个字)