Java Puzzle

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

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

 

题1:

public class Confusing ...{
    
public Confusing(Object o) ...
{
        System.out.println(
"object"
);
    }

    
public Confusing(double[] array) ...{
        System.out.println(
"double array"
);
    }

    
    
public static void main(String[] args) ...{
        
new Confusing(null
);
    }

}

 问:输出什么?

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,

 

 

阅读更多
个人分类: Coding
想对作者说点什么? 我来说一句

Java PUZZLE Java 解惑

2010年06月05日 298KB 下载

interview question

2009年09月25日 201B 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭