class Base {
  public static void test() {
    System.out.println("Base test");
  }
}public class T extends Base {
  public static void test() {
    System.out.println("T test");
  }  public static void main(String[] args) {
    System.out.println(-0.0 == 0.0); // 问题1
    Base b = new T();
    b.test(); // 问题2
  }
}

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【tteesstt】截止到2008-07-15 13:25:00的历史汇总数据(不包括此帖):
    发帖的总数量:108                      发帖的总分数:6900                     每贴平均分数:63                       
    回帖的总数量:75                       得分贴总数量:8                        回帖的得分率:10%                      
    结贴的总数量:108                      结贴的总分数:6900                     
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:0                        未结的总分数:0                        
    结贴的百分比:100.00%               结分的百分比:100.00%                  
    无满意结贴率:0.00  %               无满意结分率:0.00  %                  
    敬礼!
      

  2.   

    第一个相等,都是0啊
    第二个Base test ,因为静态方法属于类而不是对象,所以没有重定义的说法
      

  3.   

     晕,被绕进去了,看到楼主以前发的贴子都很有迷惑性,我就认为-0.0 == 0.0  应该是false..
      

  4.   

    之前考scjp的时候,记得那本考试指南上是这样说的,静态方法不可以被重写,但是可以被重新定义.就是说子类的与父类同名的静态方法是一个全新的,与父类的同名方法无任何关系的方法
      

  5.   

    扩展一下:System.out.println(Math.signum(-0.0));上面代码输出什么?
      

  6.   

    Double negativeZero = new Double(-0.0);
    negativeZero.equals(-0.0);  //结果是?
    negativeZero.equals( 0.0);  //结果是?
      

  7.   


    System.out.println(Math.signum(1.2)); 
    System.out.println(Math.signum(-0.2)); 又如何呢
      

  8.   

    虽然B指向的对象是用T类创建的,
    但是声明b的时候是用的Base类,
    而静态方法是属于类的,所以b.test()调用的是Base类的静态方法,
    不过我也不是很懂,之前没想过这个问题,
    T类的test()方法应该是一个和Base类里test方法没任何关系的吧,
    只是两个名字相同而已?
      

  9.   

    输出结果是:
    true
    Base test
    第一个就不用说了。
    静态方法是属于类的。
      

  10.   

    b 的类型是Base,且静态方法属于类.
      

  11.   

    结果不用说了,大家一运行自然清楚,说下为什么吧!问题1: Java规范指出Java语言的浮点数完全参照IEEE-754浮点数规范来定义,在那个规范中是不区分0.0和-0.0的,再说编译器进行==计算之前也会优化浮点数常量的值,所以怎么说都是相等。问题2: 明确Java除了类的实例还有类对象这个概念,静态方法不属于类实例,而属于Class对象,所以最后调用哪个静态方法要看类的签名而不是构造函数,签名是Base类,在编译期间JVM就会加载Base类的static方法,运行期调用
      

  12.   

    1.true
    2.Base test
    理由上面基本说了,我就不说了