jdk 取整数_JDK 15中的确切绝对整数

jdk 取整数

JDK 15 Early Access Build b18向Math和StrictMath类引入了新方法,这些方法将在提供的值超出方法所支持的范围时抛出ArithmeticException ,而不会溢出。 这些方法为Java中的“绝对值”概念带来了Math.addExact , Math.subtractExact和Math.multiplyExact之类的方法带来的基本算术功能。

在JDK 15之前, Integer.MIN_VALUE和Long.MIN_VALUE使相应的方法Math.abs和StrictMath.abs返回相同的负数,MIN_VALUE可能的最大负数所表示。 此行为在Javadoc文档中针对受影响的方法进行了描述,并通过以下所示的代码进行了演示( 可在GitHub上找到 ):

演示JDK之前的15种绝对值方法

 /** * Demonstrates "absExact" methods added to {@link Math} * and {@link StrictMath} with JDK 15 Early Access Build b18 * (JDK-8241374: https://bugs.openjdk.java.net/browse/JDK-8241374 ). */  public class AbsoluteExactness  { public void demonstrateMathAbsInteger( final int integer) { out.println( "Math.abs(" + integer + "): " + Math.abs(integer)); } public void longNumber) demonstrateMathAbsLong( final long longNumber) { out.println( "Math.abs(" + longNumber + "L): " + Math.abs(longNumber)); } public void demonstrateStrictMathAbsInteger( final int integer) { out.println( "StrictMath.abs(" + integer + "): " + StrictMath.abs(integer)); } public void longNumber) demonstrateStrictMathAbsLong( final long longNumber) { out.println( "StrictMath.abs(" + longNumber + "L): " + StrictMath.abs(longNumber)); } public static void main( final String[] arguments) { final AbsoluteExactness instance = new AbsoluteExactness(); // Demonstrate pre-JDK 15 Math/StrictMath "abs" functions on minimum values. instance.demonstrateMathAbsInteger(Integer.MIN_VALUE+ 1 ); instance.demonstrateMathAbsInteger(Integer.MIN_VALUE); instance.demonstrateMathAbsLong(Long.MIN_VALUE+ 1 ); instance.demonstrateMathAbsLong(Long.MIN_VALUE); instance.demonstrateStrictMathAbsInteger(Integer.MIN_VALUE+ 1 ); instance.demonstrateStrictMathAbsInteger(Integer.MIN_VALUE); instance.demonstrateStrictMathAbsLong(Long.MIN_VALUE+ 1 ); instance.demonstrateStrictMathAbsLong(Long.MIN_VALUE); }  } 

执行以上代码后,将写入以下输出:

 Math.abs(- 2147483647 ): 2147483647  Math.abs(- 2147483648 ): - 2147483648  Math.abs(-9223372036854775807L): 9223372036854775807  Math.abs(-9223372036854775808L): - 9223372036854775808  StrictMath.abs(- 2147483647 ): 2147483647  StrictMath.abs(- 2147483648 ): - 2147483648  StrictMath.abs(-9223372036854775807L): 9223372036854775807  StrictMath.abs(-9223372036854775808L): - 9223372036854775808 

此输出表明intlong范围内的最大负允许值导致从MathStrictMath上的适当abs方法返回相同的值。

JDK 15 Early Access Build b18引入了absExact方法,这种方法在这种情况下抛出ArithmeticException而不是返回负值。 以下代码( 在GitHub上也有 )证明了这一点:

演示JDK 15引入的绝对方法

 public class AbsoluteExactness  { public void demonstrateMathAbsExactInteger( final int integer) { try { out.println( "Math.absExact(" + integer + "): " + Math.absExact(integer)); } catch (ArithmeticException exception) { err.println( "Math.absExact(" + integer + "): " + exception); } } public void longNumber) demonstrateMathAbsExactLong( final long longNumber) { try { out.println( "Math.absExact(" + longNumber + "L): " + Math.absExact(longNumber)); } catch (ArithmeticException exception) { err.println( "Math.absExact(" + longNumber + "L): " + exception); } } public void demonstrateStrictMathAbsExactInteger( final int integer) { try { out.println( "StrictMath.absExact(" + integer + "): " + StrictMath.absExact(integer)); } catch (ArithmeticException exception) { err.println( "StrictMath.absExact(" + integer + "):" + exception); } } public void longNumber) demonstrateStrictMathAbsExactLong( final long longNumber) { try { out.println( "StrictMath.absExact(" + longNumber + "L): " + StrictMath.absExact(longNumber)); } catch (ArithmeticException exception) { err.println( "StrictMath.absExact(" + longNumber + "L): " + exception); } } public static void main( final String[] arguments) { final AbsoluteExactness instance = new AbsoluteExactness(); // Demonstrate JDK 15-introduced Math/StrictMath "absExact" functions // on minimum values. instance.demonstrateMathAbsExactInteger(Integer.MIN_VALUE+ 1 ); instance.demonstrateMathAbsExactInteger(Integer.MIN_VALUE); instance.demonstrateMathAbsExactLong(Long.MIN_VALUE+ 1 ); instance.demonstrateMathAbsExactLong(Long.MIN_VALUE); instance.demonstrateStrictMathAbsExactInteger(Integer.MIN_VALUE+ 1 ); instance.demonstrateStrictMathAbsExactInteger(Integer.MIN_VALUE); instance.demonstrateStrictMathAbsExactLong(Long.MIN_VALUE+ 1 ); instance.demonstrateStrictMathAbsExactLong(Long.MIN_VALUE); } 

接下来显示此代码的输出,并演示将MIN_VALUE传递给absExact方法时引发的清除异常消息。

 Math.absExact(- 2147483647 ): 2147483647  Math.absExact(- 2147483648 ): java.lang.ArithmeticException: Overflow to represent absolute value of Integer.MIN_VALUE  Math.absExact(-9223372036854775807L): 9223372036854775807  Math.absExact(-9223372036854775808L): java.lang.ArithmeticException: Overflow to represent absolute value of Long.MIN_VALUE  StrictMath.absExact(- 2147483647 ): 2147483647  StrictMath.absExact(- 2147483648 ):java.lang.ArithmeticException: Overflow to represent absolute value of Integer.MIN_VALUE  StrictMath.absExact(-9223372036854775807L): 9223372036854775807  StrictMath.absExact(-9223372036854775808L): java.lang.ArithmeticException: Overflow to represent absolute value of Long.MIN_VALUE 

我发现,通常对于意外的边缘情况抛出异常要比返回“某物”更好,这需要我阅读Javadoc来了解该情况是什么以及在该情况下返回了什么。 该异常使我们很明显地遇到了边缘情况,而不是发现从绝对值函数调用返回的负数仅在某个时间以后才实现,并且在代码中“下游”。 如果没有其他问题,那么仅使用Math.absExactStrictMath.absExact方法就可以向Java开发人员暗示,在使用Java的数学库来计算绝对值时要考虑一些“非精确”的可能性,并且这种实现可能导致阅读Javadoc找出那些不确切的情况。

翻译自: https://www.javacodegeeks.com/2020/05/exact-absolute-integral-numbers-in-jdk-15.html

jdk 取整数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/331438.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java数据库编程——可滚动和可更新的结果集

【0】README 1) 本文部分文字描述转自 core java volume 2 , 测试源代码均为原创, 旨在理解 java数据库编程——可滚动和可更新的结果集 的基础知识 ; 2)for database connection config, please visit :…

Spring入门(四)之BeanFactory

一、BeanFacotry访问一个Spring bean容器的根接口。这是一个Bean容器基本客户端视图;进一步的接口如ListableBeanFactory和configurablebeanfactory供特定用途。此接口由包含许多bean定义的对象来实现,每个对象都有唯一的字符串名称标识。根据bean定义&a…

apache derby_Apache Derby数据库JVM安全策略

apache derby抽象 我已经发布了许多有关Derby的博客: Derby数据库备份 同一主机上的多个Derby网络服务器 Apache Derby数据库用户和权限 与Maven和内存中Derby数据库的集成测试 这本不打算是一个系列。 但是多年来,我越来越多地使用Derby。 我开始将…

java数据库编程——事务

【0】README 1) 本文部分文字描述转自 core java volume 2 , 测试源代码均为原创, 旨在理解 java数据库编程——事务 的基础知识 ; 2)for database connection config, please visit : https://github.co…

算法九之基数排序

一、基数排序 (1)基数排序的简介 基数排序不同于其他的排序算法,它不是基于比较的算法。基数排序是一种借助多关键字排序的思想对单逻辑关键字进行排序的方法。它是一种稳定的排序算法。  通常用于对数的排序选择的是最低位优先法&#xff…

在Spring中使用多个动态缓存

在第三篇有关Spring(长时间)的缓存管理器的文章中,我想通过展示如何配置多个动态创建缓存的缓存管理器来扩展前 两个 。 Spring具有CompositeCacheManager ,从理论上讲,它应该允许使用多个缓存管理器。 它通过询问基础…

java数据库编程——元数据(metadata)+web 与企业应用中的连接管理

【0】README 1) 本文部分文字描述转自 core java volume 2 , 测试源代码均为原创, 旨在理解 java数据库编程——元数据(metadata)web 与企业应用中的连接管理 的基础知识 ; 2)for database co…

托管 非托管_如何在托管的Kubernetes上备份Neo4J

托管 非托管在下面的视频中,我将解释如何对在托管Kubernetes环境中运行的Neo4J实例进行完整和增量备份。 我们将使用其他Pod进行远程备份,并将备份数据存储在托管环境提供的持久卷上。 如果您想知道如何将Neo4J部署到托管Kubernetes,请查看以…

java国际化——Locale+数字格式

【0】README 1) 本文部分文字描述转自 core java volume 2 , 测试源代码均为原创, 旨在理解 java国际化——Locale数字格式 的基础知识 ; 2) java 编程语言是第一个设计成为全面支持国际化的语言。 2.1)…

Linux指令类型(一)change指令

一、change指令 chattr chgrp chmod chown chfn chsh chroot 二、ch指令详细介绍 &#xff08;1&#xff09;chattr 全名&#xff1a;change attribute 作用&#xff1a;chattr命令用于改变文件属性 语法&#xff1a;chattr [-RV][-v<版本编号>]…

restful rest_HATEOAS的RESTful服务。 REST:刷新器

restful rest在这篇文章中&#xff0c;我们将介绍有关HATEOAS的RESTful服务的综合文章。 REST&#xff1a;刷新器。 1.简介 “不好了&#xff01; 请&#xff0c;不要再发表有关REST的文章&#xff01;” 你们中的许多人可能会尖叫&#xff0c;这是正确的。 已经出版了太多的…

Unicode® Character Name Index

【0】README 0.1&#xff09; there are unicodes for varients of alphabet a, for that of b, c, or d and so on, please visit http://unicode.org/charts/charindex.html [A] A WITH ACUTE, LATIN CAPITAL LETTER 00C1 A WITH ACUTE, LATIN SMALL LETTER 00E1 A WITH…

java8 hash算法

一、hash算法哈希算法将任意长度的二进制值映射为较短的固定长度的二进制值&#xff0c;这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母&#xff0c;随后的哈希都将产生不同的值。要找到散列为同…

exchanger_如何通过示例在Java中使用Exchanger

exchanger大家好&#xff0c;如果您在并发Java应用程序中工作&#xff0c;那么您可能听说过java.util.concurrent包的Exchanger类。 Java中的Exchanger是Java 1.5中与CountDownLatch &#xff0c; CyclicBarrier和Semaphores一起引入的另一个并发或同步实用程序。 顾名思义&…

Java Enumeration接口与Iterator接口

一、Enumeration接口 Enumeration接口中定义了一些方法&#xff0c;通过这些方法可以枚举&#xff08;一次获得一个&#xff09;对象集合中的元素。 这种传统接口已被迭代器取代&#xff0c;虽然Enumeration 还未被遗弃&#xff0c;但在现在代码中已经被很少使用了。尽管如此&a…

java国际化——日期和时间+排序

【0】README 1&#xff09; 本文部分文字描述转自 core java volume 2 &#xff0c; 测试源代码均为原创&#xff0c; 旨在理解 java国际化——日期和时间排序 的基础知识 &#xff1b; 【1】日期和时间 1&#xff09;当格式化日期和时间时&#xff0c;需要考虑4个与 Locale …

jvm 垃圾收集算法_JVM垃圾收集和优化

jvm 垃圾收集算法总览 在对系统进行性能相关问题的故障排除时&#xff0c;内存优化是一个需要深入分析每个系统在内存中存储的内容&#xff0c;存储时间和访问方式的场所。 这篇文章是要对背景信息进行注释&#xff0c;并在此工作中要注意一些要点&#xff0c;这些工作要针对基…

数据库SQL索引

一、索引的意义 表中创建索引&#xff0c;以便更加快速高效地查询数据。 用户无法看到索引&#xff0c;它们只能被用来加速搜索/查询。 注释&#xff1a;更新一个包含索引的表需要比更新一个没有索引的表花费更多的时间&#xff0c;这是由于索引本身也需要更新。因此&#x…

java国际化——消息格式化+文本文件和字符集

【0】README 1&#xff09; 本文部分文字描述转自 core java volume 2 &#xff0c; 测试源代码均为原创&#xff0c; 旨在理解 java国际化——消息格式化文本文件和字符集 的基础知识 &#xff1b; 2&#xff09; 由于本文涉及到的源代码都比较简单&#xff0c;所以直接将全…