日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

JDK源码解析之 Java.lang.Float

發(fā)布時間:2025/3/8 java 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JDK源码解析之 Java.lang.Float 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Float類是原始類型float的包裝類,它包含若干有效處理浮點值的方法,如將其轉(zhuǎn)換為字符串表示形式,反之亦然。Float類的一個對象可以包含一個浮點值

一、類定義

public final class Float extends Number implements Comparable<Float> {}
  • 類被聲明為final的,表示不能被繼承;
  • 繼承了Number抽象類,可以用于數(shù)字類型的一系列轉(zhuǎn)換;
  • 實現(xiàn)了Comparable接口,強(qiáng)行對實現(xiàn)它的每個類的對象進(jìn)行整體排序

二、成員變量

//一個保持正無窮大的 float 類型常數(shù) public static final float POSITIVE_INFINITY = 1.0f / 0.0f;//一個保持負(fù)無窮大的 float 類型常數(shù) public static final float NEGATIVE_INFINITY = -1.0f / 0.0f;//值為NaN(Not a Number,非數(shù))的一個 float 類型常數(shù) 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 的有限最小正數(shù)值public static final float MIN_NORMAL = 0x1.0p-126f; // 1.17549435E-38f//保持最小單精度類型的最小非零的常數(shù) public static final float MIN_VALUE = 0x0.000002P-126f; // 1.4e-45f// float 變量可以擁有的最大指數(shù)值。 public static final int MAX_EXPONENT = 127; // float 變量可以擁有的最小指數(shù)值。 public static final int MIN_EXPONENT = -126;//一個double類型變量為32位,即4個字節(jié)。 public static final int SIZE = 32; //用于表示單精度值(float值)的字節(jié)數(shù) public static final int BYTES = SIZE / Byte.SIZE;//該類的實例表示基本類型float @SuppressWarnings("unchecked") public static final Class<Float> TYPE = (Class<Float>) Class.getPrimitiveClass("float");

三、構(gòu)造器

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 依然提供了根據(jù)基本類型float以及float的String形式構(gòu)造,String形式依然借助于parseXXX形式 parseFloat

另外,也提供了根據(jù)基本類型double進(jìn)行構(gòu)造的方式,內(nèi)部直接強(qiáng)轉(zhuǎn)

四、常用方法

Float多數(shù)方法與Double方法類似

1、isNaN(float v)

靜態(tài)方法,是否一個非數(shù)字 (NaN) 值,非數(shù)值 true

public static boolean isNaN(float v) {return (v != v);}

實例方法:boolean isNaN()

2、isFinite(float f)

靜態(tài)方法,是否是有限的浮點數(shù),有限的true

public static boolean isFinite(float f) {return Math.abs(f) <= FloatConsts.MAX_VALUE;}
3、isInfinite(float v)

靜態(tài)方法,是否是無窮大,是無窮大 true

public static boolean isInfinite(float v) {return (v == POSITIVE_INFINITY) || (v == NEGATIVE_INFINITY);}

實例方法:boolean isInfinite()

4、compare(float f1, float f2)

靜態(tài)方法,比較兩個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)兩個對象進(jìn)行大小比較,依賴于靜態(tài)方法

5、parseXXX系列

字符串解析 為 基本類型,

不需要對象,所以都是靜態(tài)方法

public static float parseFloat(String s) throws NumberFormatException {return FloatingDecimal.parseFloat(s);}
6、valueOf系列

把基本基本類型 包裝為對象

用來創(chuàng)建獲得對象,所以無需對象,全都是靜態(tài)方法

public static Float valueOf(String s) throws NumberFormatException {return new Float(parseFloat(s));}
7、XXXValue系列

byteValue()、shortValue()、intValue()、longValue()、floatValue()、doubleValue()

都是強(qiáng)轉(zhuǎn)內(nèi)部的 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方法應(yīng)該是首選。

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對象的數(shù)值相等性。這應(yīng)該用于比較兩個Double值的數(shù)值相等性,因為它會區(qū)分較小值和較大值。返回小于0,0的值,大于0的值小于,等于和大于。

compare用于比較兩個原始double值的數(shù)值相等。因為它是一個靜態(tài)方法,因此可以在不創(chuàng)建任何Double對象的情況下使用它。

五、拓展

1、Java中double和float的區(qū)別

float是單精度類型,精度是8位有效數(shù)字,取值范圍是10的-38次方到10的38次方,float占用4個字節(jié)的存儲空間

double是雙精度類型,精度是17位有效數(shù)字,取值范圍是10的-308次方到10的308次方,double占用8個字節(jié)的存儲空間

當(dāng)你不聲明的時候,默認(rèn)小數(shù)都用double來表示,所以如果要用float的話,則應(yīng)該在其后加上f

在程序中處理速度不同,一般來說,CPU處理單精度浮點數(shù)的速度比處理雙精度浮點數(shù)快

總結(jié)

以上是生活随笔為你收集整理的JDK源码解析之 Java.lang.Float的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。