当前位置: 代码迷 >> J2SE >> 对于答案有点不理解, 答案是 4.2解决方案
  详细解决方案

对于答案有点不理解, 答案是 4.2解决方案

热度:222   发布时间:2016-04-24 15:22:56.0
对于答案有点不理解, 答案是 4.2
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);
}
}


------解决方案--------------------
程序中包含了assert的话,你要用javac -source 1.4 xxx.java来编译,否则编译器会报错的。要想让assert得部分运行的话,要使用java -ea xxx来运行,否则包含assert得行会被忽略。
------解决方案--------------------
运行结果是
f3=NaN
------解决方案--------------------
运行结果是:f3=NaN
----------------
NaN是一个特殊的非数值型值,任何数和它进行运算都会得到NaN,且任意两个NaN又不相等,故assert为假,f2=NaN;f3=1.5f;最后一运算,f3=NaN

------解决方案--------------------
如果D:\javas> java -ea AssertTest的话,结果是:
f3=4.2
怎么解释阿。。
------解决方案--------------------
运行结果f3=NaNlz用的哪个版本的jdk?
------解决方案--------------------
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!


------解决方案--------------------
关注
------解决方案--------------------
赞同biggestfinger()
  相关解决方案