java - Java 中转换为 int 和 intValue() 方法的区别

标签 java

我有一个长值需要转换为整数。当我使用转换时,整数值不时给出一个负值,这不是预期的。但是当我在 Long 中使用 intValue() 方法时,预期的结果出现了。

我想知道转换和使用intValue()方法的区别

  1. 类型转换示例

    int days = (int) ((toDate.getTime() - fromDate.getTime())/(1000 * 60 * 60 * 24));

  2. 整数值示例

    int days = ((Long) ((toDate.getTime() - fromDate.getTime())/(1000 * 60 * 60 * 24))).intValue();

编辑:更详细的示例,以显示负值而不溢出,如评论中所建议的那样。类型转换前结果为27。类型转换时,该值变为-22。但如果使用 intValue 方法,则结果为 27。

代码

            System.out.println("nextDeliveryDate = " + nextDeliveryDate);
            System.out.println("nextDeliveryDate.getTime() = " + nextDeliveryDate.getTime());
            System.out.println("expectedDeliveryDate = " + expectedDeliveryDate);
            System.out.println("expectedDeliveryDate.getTime() = " + expectedDeliveryDate.getTime());
            System.out.println("nextDeliveryDate.getTime() - expectedDeliveryDate.getTime() = " + (nextDeliveryDate.getTime() - expectedDeliveryDate.getTime()));
            System.out.println("(nextDeliveryDate.getTime() - expectedDeliveryDate.getTime()) / (1000 * 60 * 60 * 24) = " + (nextDeliveryDate.getTime() - expectedDeliveryDate.getTime()) / (1000 * 60 * 60 * 24));
            System.out.println("((int) (nextDeliveryDate.getTime() - expectedDeliveryDate.getTime()) / (1000 * 60 * 60 * 24)) = " + ((int) (nextDeliveryDate.getTime() - expectedDeliveryDate.getTime()) / (1000 * 60 * 60 * 24)));
            System.out.println("((Long) ((nextDeliveryDate.getTime() - expectedDeliveryDate.getTime()) / (1000 * 60 * 60 * 24))).intValue() = " + ((Long) ((nextDeliveryDate.getTime() - expectedDeliveryDate.getTime()) / (1000 * 60 * 60 * 24))).intValue());

结果

Info: nextDeliveryDate = Thu May 14 00:00:00 IST 2015
Info: nextDeliveryDate.getTime() = 1431541800000
Info: expectedDeliveryDate = Fri Apr 17 00:00:00 IST 2015
Info: expectedDeliveryDate.getTime() = 1429209000000
Info: nextDeliveryDate.getTime() - expectedDeliveryDate.getTime() = 2332800000
Info: (nextDeliveryDate.getTime() - expectedDeliveryDate.getTime()) / (1000 * 60 * 60 * 24) = 27
Info: ((int) (nextDeliveryDate.getTime() - expectedDeliveryDate.getTime()) / (1000 * 60 * 60 * 24)) = -22
Info: ((Long) ((nextDeliveryDate.getTime() - expectedDeliveryDate.getTime()) / (1000 * 60 * 60 * 24))).intValue() = 27

最佳答案

我不认为你的结果应该有所不同,因为这是 Long.intValue() 方法的作用:

public int intValue() {
    return (int)value;
}

这两行之间的控制流有些不对。

您可以尝试下面的测试:

Calendar now = Calendar.getInstance();
Date fromDate = now.getTime();
now.add(Calendar.YEAR, 10);
Date toDate = now.getTime();

System.out.println("line 0: " + (toDate.getTime() - fromDate.getTime()));
System.out.println("line 1: " + (int)(toDate.getTime() - fromDate.getTime()));
System.out.println("line 2: " + new Long((toDate.getTime() - fromDate.getTime())).intValue());

int days = (int) ((toDate.getTime() - fromDate.getTime()) / (1000 * 60 * 60 * 24));

System.out.println("line 3: " + days);

days = ((Long) ((toDate.getTime() - fromDate.getTime()) / (1000 * 60 * 60 * 24))).intValue();

System.out.println("line 4: " + days);

关于java - Java 中转换为 int 和 intValue() 方法的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29630831/

相关文章:

java - 在 java/spring-boot 中,如果找不到项目,返回空 json 对象的最干净方法是什么

java - Windows 和 Linux 中用于 Java 代码的路径定界符

java - org.apache.camel.NoTypeConversionAvailableException : No type converter available to convert from type:

java - 包/类名可以作为函数参数吗?

java - 在 AWT 应用程序中处理图像解密 key

java - 为什么带有显式返回的空 lambda 和构造函数会导致编译器错误(Java Bug?)

java - Spring Boot HIbernate 问题 : Error executing DDL via JDBC Statement with ddl-auto=create-drop

Java 8 应用程序在 MacOS Catalina 10.15 上无法在深色模式下正常工作

java - 如何使用 webdriver 选择 Selenium 中的 Angular 网格 Controller 行?

java - hibernate : Change Hibernate Connection