Java 中 Math 的 multiplyExact() 方法


在 Java 中,multiplyExact() 是 Math 类的一个内置静态方法,它接受两个参数并返回它们的乘积作为结果。此方法可以接受整数或长整型类型的数值。需要注意的是,如果产生的结果超过了整数的大小,则可能会抛出异常。

在了解了 Java 中 multiplyExact() 的功能后,一个可能出现在脑海中的问题是,我们也可以使用 '*' 运算符来乘以两个操作数,那么为什么还需要 multiplyExact() 方法呢?我们将回答这个问题,并通过示例来探讨 multiplyExact() 方法。

Java 中的 multiplyExact() 方法

对于两个或多个任意类型值的简单乘法运算,我们可以依赖 * 运算符,但是我们不能使用 multiplyExact() 方法乘以除整数和长整型之外的任何类型的值。此外,它只接受两个参数。

在进入示例程序之前,让我们先讨论一下 multiplyExact() 方法的语法:

语法

public static Type multiplyExact(Type val1, Type val2);

这里,'Type' 指定整数或长整型数据类型。

要在我们的 Java 程序中使用 multiplyExact() 方法,我们需要使用以下命令导入 Math 类:

import java.lang.Math;

请注意,multiplyExact() 是 Math 类的静态方法,要调用此方法,我们不需要对象,而是使用类名后跟点 (.) 运算符。

示例

在下面的示例中,我们将使用 multiplyExact() 方法计算整数的值的乘积。

import java.lang.Math;
public class Example1 {
   public static void main(String args[]) {
      int a = 12, b = 34;
      System.out.printf("Product of a and b is: ");
      // performing the first multiplication 
      System.out.println(Math.multiplyExact(a, b));
      int c = 78, d = 93;
      System.out.printf("Product of c and d is: ");
      // performing the second multiplication 
      System.out.println(Math.multiplyExact(c, d));
   }
}

输出

Product of a and b is: 408
Product of c and d is: 7254

示例

在此示例中,我们将使用 multiplyExact() 方法计算长整型值的乘积。

import java.lang.Math;
public class Example2 {
   public static void main(String args[]) {
      long val1 = 1258, val2 = 304;
      System.out.printf("Product of val1 and val2 is: ");
      System.out.println(Math.multiplyExact(val1, val2));
      long val3 = 478, val4 = 113;
      System.out.printf("Product of val3 and val4 is: ");
      System.out.println(Math.multiplyExact(val3, val4));
   }
}

输出

Product of val1 and val2 is: 382432
Product of val3 and val4 is: 54014

示例

下面的示例显示了如果结果超过了整数变量的大小,输出将会是什么。

import java.lang.Math;
public class Example3 {
   public static void main(String args[]) {
      int val1 = 1258526920; 
      int val2 = 1304;
      System.out.printf("Product of val1 and val2 is: ");
      // this line will throw an exception
      System.out.println(Math.multiplyExact(val1, val2));
   }
}

输出

Product of val1 and val2 is: Exception in thread "main" java.lang.ArithmeticException: integer overflow
at java.base/java.lang.Math.multiplyExact(Math.java:992)
at Example3.main(Example3.java:7)

示例

我们可以使用 try 和 catch 块以更专业的方式处理异常。

import java.lang.Math;
public class Example4 {
   public static void main(String args[]) {
      try {
         int val1 = 1258526920; 
         int val2 = 1304;
         System.out.println(Math.multiplyExact(val1, val2));
      }
      catch(ArithmeticException exp) { // to handle the exception
         System.out.println("Calculation produced too big result");
      }
   }
}

输出

Calculation produced too big result

结论

我们从介绍 multiplyExact() 方法开始本文,它是一个 Math 类的内置静态方法,在下一节中,我们通过示例程序讨论了它的实际实现。此外,我们还了解了如何处理由结果溢出引起的异常。

更新于: 2023年8月10日

217 次浏览

开启你的 职业生涯

通过完成课程获得认证

立即开始
广告