题目1:
看看下面这个程序:
public class Test2{
public static void main(String[] args)
{ float a = 3.4; }
}
这样一个简单的程序编译能通过吗?
答案是:不能。
因为精度不一样。float是16位的,double是32位的。定义a = 3.4系统默认是double类型。
如果要表示float型浮点数,则应在尾部加F或f来表示。
就使用强制类型转换: float a = (float) 3.4;就是正确的了。
题目2:
再来看看这个能不能编译?
public class Test2{
public static void main(String[] args)
{ Float a = new Float(3.4); }
}
其实是没问题的。
看看Float类的源代码吧!
public Float(double value){
this.value = (float)value;
}
题目3:
public class Test2{
public static void main(String[] args) {
Float a = new Float(3.4);
System.out.println(a.SIZE);
a = new Float(34000);
System.out.println(a.SIZE);
}
}
让我们来看看此程序会输出什么呢?
我们先来看看JDK的解释吧.
public static final int SIZE
The number of bits used to represent a float value.
意思是说:通常去描述一个float值的位数.
这个是一个常量,来看看源码吧:
public static final int SIZE = 32;
final int 变量一旦被定义就不能被改变~
4:除以0是否异常?
最后想说的一点是,整数除0运算时会出错,但在浮点型却不会。
Java语言定义了三个特殊的浮点值来表示浮点数除0运算时的各种出错情形:
- Infinity:整无穷大(正数除零时的结果)
- -Infinity:负无穷大(负数除零时的结果)
- NaN:Not a Number(0.0/0或负数开平方根时的结果)
所以float c1 = 3.0f/0;的结果是:Infinity