Java Puzzle

今天听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,

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值