Float類是原始類型float的包裝類,它包含若干有效處理浮點值的方法,如將其轉換為字符串表示形式,反之亦然。Float類的一個對象可以包含一個浮點值
一、類定義
public final class Float extends Number implements Comparable<Float> {}
- 類被聲明為final的,表示不能被繼承;
- 繼承了Number抽象類,可以用于數字類型的一系列轉換;
- 實現了Comparable接口,強行對實現它的每個類的對象進行整體排序
二、成員變量
//一個保持正無窮大的 float 類型常數
public static final float POSITIVE_INFINITY = 1.0f / 0.0f;//一個保持負無窮大的 float 類型常數
public static final float NEGATIVE_INFINITY = -1.0f / 0.0f;//值為NaN(Not a Number,非數)的一個 float 類型常數
public static final float NaN = 0.0f / 0.0f;//一個 float 類型常量存儲 float 的有限最大值public static final float MAX_VALUE = 0x1.fffffeP+127f; // 3.4028235e+38f//一個 float 類型常量存儲 float 的有限最小正數值public static final float MIN_NORMAL = 0x1.0p-126f; // 1.17549435E-38f//保持最小單精度類型的最小非零的常數
public static final float MIN_VALUE = 0x0.000002P-126f; // 1.4e-45f// float 變量可以擁有的最大指數值。
public static final int MAX_EXPONENT = 127;
// float 變量可以擁有的最小指數值。
public static final int MIN_EXPONENT = -126;//一個double類型變量為32位,即4個字節。
public static final int SIZE = 32;
//用于表示單精度值(float值)的字節數
public static final int BYTES = SIZE / Byte.SIZE;//該類的實例表示基本類型float
@SuppressWarnings("unchecked")
public static final Class<Float> TYPE = (Class<Float>) Class.getPrimitiveClass("float");
三、構造器
public Float(float value) {this.value = value;}public Float(double value) {this.value = (float)value;}public Float(String s) throws NumberFormatException {value = parseFloat(s);}
Float 依然提供了根據基本類型float以及float的String形式構造,String形式依然借助于parseXXX形式 parseFloat
另外,也提供了根據基本類型double進行構造的方式,內部直接強轉
四、常用方法
Float多數方法與Double方法類似
1、isNaN(float v)
靜態方法,是否一個非數字 (NaN) 值,非數值 true
public static boolean isNaN(float v) {return (v != v);}
實例方法:boolean isNaN()
2、isFinite(float f)
靜態方法,是否是有限的浮點數,有限的true
public static boolean isFinite(float f) {return Math.abs(f) <= FloatConsts.MAX_VALUE;}
3、isInfinite(float v)
靜態方法,是否是無窮大,是無窮大 true
public static boolean isInfinite(float v) {return (v == POSITIVE_INFINITY) || (v == NEGATIVE_INFINITY);}
實例方法:boolean isInfinite()
4、compare(float f1, float f2)
靜態方法,比較兩個float
public static int compare(float f1, float f2) {if (f1 < f2)return -1; // Neither val is NaN, thisVal is smallerif (f1 > f2)return 1; // Neither val is NaN, thisVal is larger// Cannot use floatToRawIntBits because of possibility of NaNs.int thisBits = Float.floatToIntBits(f1);int anotherBits = Float.floatToIntBits(f2);return (thisBits == anotherBits ? 0 : // Values are equal(thisBits < anotherBits ? -1 : // (-0.0, 0.0) or (!NaN, NaN)1)); // (0.0, -0.0) or (NaN, !NaN)}
f1 < f2 小于0,f1 = f2 等于0,f1 > f2 大于0
實例方法:int compareTo(Float anotherFloat)兩個對象進行大小比較,依賴于靜態方法
5、parseXXX系列
字符串解析 為 基本類型,
不需要對象,所以都是靜態方法
public static float parseFloat(String s) throws NumberFormatException {return FloatingDecimal.parseFloat(s);}
6、valueOf系列
把基本基本類型 包裝為對象
用來創建獲得對象,所以無需對象,全都是靜態方法
public static Float valueOf(String s) throws NumberFormatException {return new Float(parseFloat(s));}
7、XXXValue系列
byteValue()、shortValue()、intValue()、longValue()、floatValue()、doubleValue()
都是強轉內部的 value
8、toString
public String toString() {return Float.toString(value);}
public static String toString(float f) {return FloatingDecimal.toJavaFormatString(f);}public String toString() {return Float.toString(value);}
9、equals(Object obj)
用于比較兩個Float對象的相等性。如果兩個對象都包含相同的float值,則此方法返回true。只有在檢查平等的情況下才能使用。在其他所有情況下,compareTo方法應該是首選。
public boolean equals(Object obj) {return (obj instanceof Float)&& (floatToIntBits(((Float)obj).value) == floatToIntBits(value));
}
9、compareTo和compare
public int compareTo(Float anotherFloat) {return Float.compare(value, anotherFloat.value);}public static int compare(float f1, float f2) {if (f1 < f2)return -1; // Neither val is NaN, thisVal is smallerif (f1 > f2)return 1; // Neither val is NaN, thisVal is larger// Cannot use floatToRawIntBits because of possibility of NaNs.int thisBits = Float.floatToIntBits(f1);int anotherBits = Float.floatToIntBits(f2);return (thisBits == anotherBits ? 0 : // Values are equal(thisBits < anotherBits ? -1 : // (-0.0, 0.0) or (!NaN, NaN)1)); // (0.0, -0.0) or (NaN, !NaN)}
compareTo用于比較兩個Double對象的數值相等性。這應該用于比較兩個Double值的數值相等性,因為它會區分較小值和較大值。返回小于0,0的值,大于0的值小于,等于和大于。
compare用于比較兩個原始double值的數值相等。因為它是一個靜態方法,因此可以在不創建任何Double對象的情況下使用它。
五、拓展
1、Java中double和float的區別
float是單精度類型,精度是8位有效數字,取值范圍是10的-38次方到10的38次方,float占用4個字節的存儲空間
double是雙精度類型,精度是17位有效數字,取值范圍是10的-308次方到10的308次方,double占用8個字節的存儲空間
當你不聲明的時候,默認小數都用double來表示,所以如果要用float的話,則應該在其后加上f
在程序中處理速度不同,一般來說,CPU處理單精度浮點數的速度比處理雙精度浮點數快