当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:13:00  来源:本站整理

Java谜题选 - I[Java编程]

赞助商链接



  本文“Java谜题选 - I[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

标题1:Sets的爱好程序

public class ShortSet{
  public static void main(String args[]) {
    Set<Short> s = new HashSet<Short>();
    for (short i=0; i<100; i++) {
      s.add(i);
       s.remove(i-1);
    }
    System.out.println(s.size());
  }
}

选项

(a) 1

(b) 100

(c) Throws exception

(d) None of the above

答案(b)100

解析历程

1 在Set中加入的是一个Short值,但是删除的倒是Integer的值.(译者:从留言中,很高兴看到有些朋友看到了这一点)

2 此路程序,s.remove(i-1),中的i-1是一个返回值为int的指导.假如i是short或byte范例,当它与int或long做算术运算时,返回的一定是int或long范例的值.

3 在履行s.remove办法时,上面的int值将被autobox成一个Integer对象.

4 注意,包含值1的Short对象和包含值1的Integer对象在对比中不被认为是对等的.

5 在Set中加入Short对象后,再删除Integer对象,后者的号令是不会被运行的(no-op).编译器也不会报错.

经验教导

1 在Java1.5中,Set的接口是这样定义的:

public interface Set<E>extends Collection<E> {
    public abstract boolean add(E e);
    public abstract boolean remove(Object o);
    ...
  }

按照上面的定义,add办法中传过去的参数范例一定要与Set中定义的范例一致,不然编译器会报错.但是,remove办法却无此限制,它承受的范例是Object,所以你可以remove任何范例,这就是所谓的type safe.这是在1.5中对Collection的generifying历程中,为了保存对从前版本中办法的支持而造成的.

2 对程序做以下窜改便可以办理问题: (short)(i-1); 即把(i-1)的int再cast成short,然后它会被autobox成Short对象,这样前面指导行里在Set中加的Short就会被删除,最后的答案也就变成(a)了.所以,任何牵扯到差别数值范例之间的运算(byte, short, char和int,long),返回的值一定是int或long. 一定要当心,尽大概不要混合利用.尽大概利用int或long.


  以上是“Java谜题选 - I[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • 利用Javascript实现网页水印(非图片水印)
  • Java开辟环境的搭建
  • Ubuntu java安装与配置
  • 办理Ubuntu 10.04 Firefox3.6 Java浏览器插件不工作的问
  • Ubuntu重装后Java环境的设置
  • Sun Java进入Ubuntu 10.10软件中央
  • Ubuntu 10.10配置Java开辟环境
  • 在Ubuntu 10.10中配置Java环境变量的办法
  • Ubuntu下Java环境的搭建
  • Ubuntu 10.04 下安装 Java, JRE
  • Ubuntu 10.04下的搭建SUN JAVA开辟环境
  • Ubuntu 12.04安装java7
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .