class AssertTest{
public static void main(String arg[]){
float f1=Float.NaN;
float f2=f1;
float f3=1.2f;try{
assert(f2==f1):f2=2;
f3=1.5f;}catch(AssertionError e){f3++;}
f3+=f2;
System.out.println("f3="+f3);
}
}

解决方案 »

  1.   

    程序中包含了assert的话,你要用javac -source 1.4 xxx.java来编译,否则编译器会报错的。要想让assert得部分运行的话,要使用java -ea xxx来运行,否则包含assert得行会被忽略。
      

  2.   


    D:\javas>javac AssertTest.javaD:\javas>java AssertTest
    f3=NaND:\javas>java -ea AssertTest
    f3=4.2
      

  3.   

    运行结果是:f3=NaN
    ----------------
    NaN是一个特殊的非数值型值,任何数和它进行运算都会得到NaN,且任意两个NaN又不相等,故assert为假,f2=NaN;f3=1.5f;最后一运算,f3=NaN
      

  4.   

    如果D:\javas>java -ea AssertTest的话,结果是:
    f3=4.2
    怎么解释阿。。
      

  5.   

    运行结果f3=NaNlz用的哪个版本的jdk?
      

  6.   

    D:\javas>java AssertTest
    f3=NaND:\javas>java -ea AssertTest
    f3=4.2jdk 1.5的
      

  7.   

    assert exp1:exp2这样的形式,当exp1为true的时候后面exp2被或略,如果false的话,后面的表达式的结果会被计算出来并作为AssertionError得构造器参数。
    try{
    assert(f2==f1):f2=2;
    f3=1.5f;}catch(AssertionError e){f3++;}
    Float.NaN == Float.NaN 的返回值是false!