Java中输出结果为什么不是0?

public class test01 {
    public static void main(String[] args) {
        Calendar c1 = Calendar.getInstance();
        Calendar c2 = Calendar.getInstance();
        c1.set(2019,1,1);
        c2.set(2019,1,1);
        long d1 = c1.getTimeInMillis();
        long d2 = c2.getTimeInMillis();
        System.out.println(d1-d2);
    }
}

程序执行有先后顺序的,两个对象时间肯定不一样啊

你如何理解为一样的呢。获得当前毫秒时间的方法是动态的,并不像通常定义的普通方法一样。那个方法是时时获取当前毫秒时间的。所以每次调用的时候,肯定得到的结果一般不相同。

程序从上往下执行 你并没有设置毫秒 只设置到日 如果非要=0那你就代码改为如下:

public class test01 {
  public static void main(String[] args) {
        Calendar c1 = Calendar.getInstance();//使用默认时区和区域设置获取日历。
        Calendar c2 = Calendar.getInstance();
        c1.set(2019, 1, 1);//设置日历字段的值 YEAR , MONTH和 DAY_OF_MONTH
        c2.set(2019, 1, 1);
        c1.setTimeInMillis(1);
        c2.setTimeInMillis(1);
        long date1 = c1.getTimeInMillis();
        long date2 = c2.getTimeInMillis();
        System.out.println(date1 - date2);
    }

}

为他们设置毫秒差

你得set 2019 1 1 0 0 0 0

以上的各位博主已经回答的很明确了。你是精确到天的数据用来比对毫秒,所以产生上面的现象。至于为什么会这样,看下Calendar.getTimeInMillis()方法源码就有个大概了解了哈。