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处理单精度浮点数的速度比处理双精度浮点数快

JDK源码解析之 Java.lang.Float相关推荐

  1. JDK源码解析之 java.lang.Exception

    异常.是所有异常的基类,用于标识一般的程序运行问题.这些问题通常描述一些会被应用程序捕获的反常情况. 一.源码部分 //继承了java.lang.Throwable public class Exce ...

  2. JDK源码解析之 java.lang.Error

    java.lang.Error 错误.是所有错误的基类,用于标识严重的程序运行问题.这些问题通常描述一些不应被应用程序捕获的反常情况. 一.源码部分 //继承了java.lang.Throwable ...

  3. JDK源码解析之 java.lang.Thread

    位于java.lang包下的Thread类是非常重要的线程类,它实现了Runnable接口,今天我们来学习一下Thread类,在学习Thread类之前,先介绍与线程相关知识:线程的几种状态.上下文切换 ...

  4. JDK源码解析之 java.lang.Integer

    teger 基本数据类型int 的包装类 Integer 类型的对象包含一个 int 类型的字段 一.类定义 public final class Integer extends Number imp ...

  5. JDK源码解析之 Java.lang.String

    String 类代表字符串.Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现. 字符串是常量:它们的值在创建之后不能更改.字符串缓冲区支持可变的字符串.因 ...

  6. JDK源码解析之 Java.lang.Object

    Object类是Java中其他所有类的祖先,没有Object类Java面向对象无从谈起.作为其他所有类的基类,Object具有哪些属性和行为,是Java语言设计背后的思维体现. Object类位于ja ...

  7. JDK源码解析之 Java.lang.Compiler

    Compiler类提供支持Java到本机代码编译器和相关服务.在设计上,它作为一个占位符在JIT编译器实现. 一.源码部分 public final class Compiler {private C ...

  8. JDK源码解析之 java.lang.Class

    Java程序在运行时,Java运行时系统一直对所有的对象进行所谓的运行时类型标识. 这项信息纪录了每个对象所属的类.虚拟机通常使用运行时类型信息选准正确方法去执行,用来保存这些类型信息的类是Class ...

  9. JDK源码解析之 Java.lang.Byte

    byte,即字节,由8位的二进制组成.在Java中,byte类型的数据是8位带符号的二进制数,以二进制补码表示的整数 取值范围:默认值为0,最小值为-128(-27);最大值是127(27-1) By ...

最新文章

  1. css3制作八棱锥_CSS基础八部分-第二部分
  2. 一、MySql优化的基础介绍
  3. 拉勾网《32个Java面试必考点》学习笔记之一------Java职业发展路径
  4. angular js环境配置
  5. 【mongoDB】测试使用gridfs,配置一个分片服务器集群
  6. javascript有用小功能总结(未完待续)
  7. 使用gdal和java对TIF格式正射影像进行拉普拉斯锐化
  8. 前端学习(2876):原生js模块化+弹幕的宽度和高度
  9. 验证必须是数字php,Element 中表单非必填数据项 必须为数字的验证问题
  10. python爬虫可以爬取哪些有用的东西_Python爬虫系列(十三) 用selenium爬取京东商品...
  11. 技术分享——SSM图书馆预约占座系统
  12. torch repeate 的用法
  13. 【微信小程序】自定义导航栏
  14. at指令 fpga_EM310模块的之_AT指令的熟悉,AT指令操作流程
  15. BCH分叉是一次站队博弈
  16. VulnHub1:Jangow: 1.0.1靶机入侵
  17. 荣耀年度旗舰曝光!麒麟990+LCD屏下指纹+40w快充,或将11月发布
  18. HDMI以及HDCP之间的关系介绍
  19. 麦卡锡问答:什么是人工智能?
  20. 预处理——HJ卫星数据

热门文章

  1. 印象笔记编辑pdf_做笔记就用印象笔记,支持录音做笔记( 附插件下载)
  2. 直接内存与元空间_深入浅出 JVM 内存管理
  3. 绿联串口线linux驱动下载,绿联usb转db9驱动下载
  4. linux xguest用户,在/etc/passwd中得到普通用户列表
  5. gbase迁移mysql_基于datax实现从gbase到mysql的数据迁移--时间字段篇
  6. BugkuCTF-MISC题红绿灯
  7. 手机访问服务器中的数据库文件,手机连接服务器数据库文件在哪里
  8. android+版本升级的时候会清楚数据马,android主进程销毁了,线程会不会也销毁?...
  9. php 登陆微博,PHP调用微博接口实现微博登录的方法示例
  10. mysql 索引 内存_mysql索引【第三篇】