前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >JDK源码解析之 Java.lang.Float

JDK源码解析之 Java.lang.Float

作者头像
栗筝i
发布于 2022-12-01 12:07:31
发布于 2022-12-01 12:07:31
40100
代码可运行
举报
文章被收录于专栏:迁移内容迁移内容
运行总次数:0
代码可运行

Float类是原始类型float的包装类,它包含若干有效处理浮点值的方法,如将其转换为字符串表示形式,反之亦然。Float类的一个对象可以包含一个浮点值

一、类定义

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public final class Float extends Number implements Comparable<Float> {}
  • 类被声明为final的,表示不能被继承;
  • 继承了Number抽象类,可以用于数字类型的一系列转换;
  • 实现了Comparable接口,强行对实现它的每个类的对象进行整体排序

二、成员变量

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//一个保持正无穷大的 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");

三、构造器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    public static boolean isNaN(float v) {
        return (v != v);
    }

实例方法:boolean isNaN()

2、isFinite(float f)

静态方法,是否是有限的浮点数,有限的true

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
     public static boolean isFinite(float f) {
        return Math.abs(f) <= FloatConsts.MAX_VALUE;
    }
3、isInfinite(float v)

静态方法,是否是无穷大,是无穷大 true

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    public static boolean isInfinite(float v) {
        return (v == POSITIVE_INFINITY) || (v == NEGATIVE_INFINITY);
    }

实例方法:boolean isInfinite()

4、compare(float f1, float f2)

静态方法,比较两个float

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    public static int compare(float f1, float f2) {
        if (f1 < f2)
            return -1;           // Neither val is NaN, thisVal is smaller
        if (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系列

字符串解析 为 基本类型,

不需要对象,所以都是静态方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    public static float parseFloat(String s) throws NumberFormatException {
        return FloatingDecimal.parseFloat(s);
    }
6、valueOf系列

把基本基本类型 包装为对象

用来创建获得对象,所以无需对象,全都是静态方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    public static Float valueOf(String s) throws NumberFormatException {
        return new Float(parseFloat(s));
    }
7、XXXValue系列

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

都是强转内部的 value

8、toString
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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方法应该是首选。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public boolean equals(Object obj) {
    return (obj instanceof Float)
           && (floatToIntBits(((Float)obj).value) == floatToIntBits(value));
}
9、compareTo和compare
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 smaller
        if (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处理单精度浮点数的速度比处理双精度浮点数快

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-08-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
处理 JS中 undefined 的 7 个技巧
为了保证的可读性,本文采用意译而非直译。 想阅读更多优质文章请猛戳GitHub博客,一年百来篇优质文章等着你! 大约8年前,当原作者开始学习JS时,遇到了一个奇怪的情况,既存在undefined 的值
前端小智@大迁世界
2019/08/02
5.2K0
处理 JS中 undefined 的 7 个技巧
你可能从未使用过的11+个JavaScript特性
这篇文章中描述的大多数功能已被暂停使用。 它们仍然在许多图书中很常见,因此值得学习。
Javanx
2020/01/14
1K0
你可能从未使用过的11+个JavaScript特性
42个实用的JavaScript优化技巧
我一直喜欢报纸之类的东西,可以在较短的时间内提供足够的信息。在这里,我为前端开发优化创建了一个新的学习列表。
前端达人
2021/05/11
11.9K0
null 和 undefined 的区别!
许多编程语言都有一个称为null的非值。它指示一个变量当前不指向一个对象,例如,当它还没有初始化的时候。
前端小智@大迁世界
2022/03/22
1.1K0
JavaScript 开发人员需要知道的简写技巧
本文来源于多年的 JavaScript 编码技术经验,适合所有正在使用 JavaScript 编程的开发人员阅读。 本文的目的在于帮助大家更加熟练的运用 JavaScript 语言来进行开发工作。 文章将分成初级篇和高级篇两部分,分别进行介绍。 初级篇 1、三目运算符 下面是一个很好的例子,将一个完整的 if 语句,简写为一行代码。 const x = 20; let answer; if (x > 10) { answer = 'greater than 10'; } else { ans
葡萄城控件
2018/06/21
8910
大话 JavaScript(Speaking JavaScript):第六章到第十章
JavaScript 花了很长时间才产生影响。许多与 JavaScript 相关的技术存在了一段时间,直到它们被主流发现。本节描述了从 JavaScript 的创建到今天发生的事情。在整个过程中,只提到了最受欢迎的项目,而忽略了许多项目,即使它们是第一个。例如,列出了 Dojo Toolkit,但也有较少人知道的qooxdoo,它是在同一时间创建的。还列出了 Node.js,尽管Jaxer在它之前就存在:
ApacheCN_飞龙
2024/01/12
3340
TypeScript和JavaScript:需要了解的实用代码技巧
在编写干净和可扩展的代码时,使用速记代码并不总是正确的决定。简明的代码有时会让人在阅读和更新时更加困惑。重要的是,你的代码是可读的,并能向其他开发者传达意义和上下文信息。
智影Yodonicc
2022/05/19
3.8K10
TypeScript和JavaScript:需要了解的实用代码技巧
javascrip菜鸟
JavaScript 是互联网上最流行的脚本语言,这门语言可用于 HTML 和 web,更可广泛用于服务器、PC、笔记本电脑、平板电脑和智能手机等设备。
zhangjiqun
2024/12/16
700
javascrip菜鸟
分享一些 JavaScript 代码简写技巧
如果||前面的值是0 '' false null undefined NaN其中的任意一种,则直接返回||后面的值
前端达人
2023/08/31
3100
分享一些 JavaScript 代码简写技巧
Web前端-JavaScript基础教程上
JavaScript是web前端开发的编程语言,大多数网站都使用到了JavaScript,所以我们要进行学习,JavaScript是必备的前端技能。
达达前端
2019/07/03
2.2K0
Web前端-JavaScript基础教程上
JavaScript小技能:变量
如果我们没有变量,我们就不得不写大量的代码去枚举和检查输入的名字,然后去显示它们,这样做显然是低效率和不可行的 。
公众号iOS逆向
2022/08/22
7070
JavaScript小技能:变量
分享 20 个提升效率的 JavaScript 缩写小技巧
JavaScript中有很多速记技巧,可以缩短代码长度,减少冗余,提高代码的可读性和可维护性。本文将介绍20个提高效率的JS缩写技巧,帮助你告别写垃圾的生活,轻松写出优雅的代码!
前端达人
2023/10/25
3210
分享 20 个提升效率的 JavaScript 缩写小技巧
前端-javascript简写技巧
本文来源于多年的 JavaScript 编码技术经验,适合所有正在使用 JavaScript 编程的开发人员阅读。
grain先森
2019/03/29
1.5K0
前端-javascript简写技巧
探索JavaScript中Null和Undefined的深渊
在讨论JavaScript中的原始数据类型时,大多数人都了解基本知识,从String,Number和Boolean开始。这些原语非常简单,可以像您期望的那样起作用。但是,本文将重点介绍称为Null和Undefined的更独特的原始数据类型。是什么使它们相似,不相似以及总体上与众不同。
公众号---人生代码
2021/02/24
7260
JS 小技巧
可以用*1来转化为数字(实际上是调用.valueOf方法) 然后使用Number.isNaN来判断是否为NaN,或者使用 a !== a 来判断是否为NaN,因为 NaN !== NaN
grain先森
2019/03/28
1.4K0
JS 小技巧
使用JavaScript的一些小技巧
https://www.w3cplus.com/javascript/javascript-tips.html
@超人
2021/02/26
1.6K0
使用JavaScript的一些小技巧
JS 中可以提升幸福度的小技巧
本文主要介绍一些JS中用到的小技巧,可以在日常Coding中提升幸福度,将不定期更新~
Nealyang
2019/10/23
9270
分享一些对你有帮助的JavaScript技巧
JavaScript也不例外。对于JavaScript,我们经常会发现,为了一个相似的结果,我们可以用多种方式来做事情,这有时会让人感到困惑。 有些用法比其他替代方法更好。
程序员海军
2021/10/11
1.3K0
分享一些对你有帮助的JavaScript技巧
JavaScript 中 10 个需要掌握基础的问题
JavaScript 是一种客户端编程语言。 全球超过90%的网站都在使用它,它是世界上最常用的编程语言之一。 因此,今天我们业讨论 10 个有关 JavaScript 的常见问题。
前端小智@大迁世界
2020/10/23
2.8K0
null,undefined的区别?
在 JavaScript 中,null 和 undefined 都表示没有值或缺失值的状态,但它们之间有一些区别。
王小婷
2023/10/30
2140
推荐阅读
相关推荐
处理 JS中 undefined 的 7 个技巧
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文