gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 01:12:32 24 4
gpt4 key购买 nike

我有一个长值需要转换为整数。当我使用转换时,整数值不时给出一个负值,这不是预期的。但是当我在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com