Math 和 StrictMath 的区别

栏目: Java · 发布时间: 5年前

内容简介:Math中的部分代码(从java.lang.Math类中提取的部分代码)StrictMath中的部分代码

Java

Math 和 StrictMath的区别

Math中的部分代码(从java.lang.Math类中提取的部分代码)

public static double cos(double a) {
	  return StrictMath.cos(a); // default impl. delegates to StrictMath
}

StrictMath中的部分代码

public static native double cos(double a);

简单:

  • Math运行效率高
  • StrictMath可以保障在不同的平台上运行都得到相同的结果(一个完全可预测的结果)

总结:

  • 两个类的相同点:都是实现了基本的数学方法,都有互相调用的地方
  • 不同点:两个类的所有相同方法中,Math类调用了StrictMath类的方法,而且都是用native修饰,C代码实现的方法

引用 Java 核心技术卷1-P40

注释: 在 Math 类中, 为了达到最快的性能, 所有的方法都使用计算机浮点单元中的例 程.. 如果得到一个完全可预测的结果比运行速度更重要的话, 那么就应该使用 StrictMath 类,, 它使用“ 自由发布的 Math 库”(fdlibm) 实现算法, 以确保在所有平台上得到相同的 ? 果n 有关这些算法的源代码请参看 www.netlib.org/fdlibm ( 当 fdlibm 为一个函数提供了 多个定义时, StrictMath 类就会遵循 IEEE 754 版本,它的名字将以“ e” 开头)。

Java中Native关键字 ==> JNI(Java Native Interface)

凡是一种语言,都希望是纯。比如解决某一个方案都喜欢就单单这个语言来写即可。Java平台有个用户和本地C代码进行互操作的API,称为Java Native Interface (Java本地接口)。

native是与C++联合开发的时候用的!java自己开发不用的!

使用native关键字说明这个方法是原生函数,也就是这个方法是用C/C++语言实现的,并且被编译成了DLL,由java去调用。 这些函数的实现体在DLL中,JDK的源代码中并不包含,你应该是看不到的。对于不同的平台它们也是不同的。这也是java的底层机制,实际上java就是在不同的平台上调用不同的native方法实现对操作系统的访问的。

  1. native 是用做java 和其他语言(如c++)进行协作时用的 也就是native 后的函数的实现不是用java写的

  2. 既然都不是java,那就别管它的源代码了,呵呵

native的意思就是通知操作系统,这个函数你必须给我实现,因为我要使用。所以native关键字的函数都是操作系统实现的,java只能调用。

java是跨平台的语言,既然是跨了平台,所付出的代价就是牺牲一些对底层的控制,而java要实现对底层的控制,就需要一些其他语言的帮助,这个就是native的作用了

本文由Aquan 创作,采用 知识共享署名4.0 国际许可协议进行许可

本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名

最后编辑时间为: 五月 27,2019


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

程序设计语言

程序设计语言

斯科特 / 裘宗燕 / 电子工业出版社 / 2007-6 / 99.00元

★列为全球上百所大学标准教材和首席参考书! ★图书馆必备典藏,作者Michael L.Scott 是计算机领域的著名学者,译者是北京大学的裘宗燕教授,他熟悉专业,译笔流畅,因此,这是一本难得的著、译双馨的佳作。 这是一本很有特色的教材,其核心是讨论程序设计语言的工作原理和技术。本书融合了传统的程序设计语言教科书和编译教科书的有关知识,并增加了一些有关汇编层体系结构......一起来看看 《程序设计语言》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具