基本数据类型转换问题

最近写代码遇到一个很基础的问题,结果自己还是花了不少时间,看来基础还是太差。特此记录下来,日后引以为戒:
基本数据类型转换问题
如上图,本来是想打印一年的毫秒数,结果打印结果完全不对,用这样的结果参与后面的业务处理结果肯定也是错误的。
再测试一下,在最后加个L:
基本数据类型转换问题
原来java自动类型转换并不是一开始就转换的,而是遇到相应的类型才会转换。照上面的例子来说,第一个例子中没有L,因此是把所有值计算出来后(1000*60*60*24*30*12)才转化为long类型,在转化之前是int类型,但是计算的结果明显超过了int类型的最大值,因此会造成数据不对。
第二个例子中,计算y1时是遇到12L时才会进行long类型转化,同理,1000*60*60*24*30也超过了int类型最大值,因此数值不对。计算y2时也是遇到1000L才会进行类型转化,但是由于之前的计算结果12*30*24*60*60没有超过int最大值,因此结果是正确的。
所以为了使结果正确,应该在一开始计算的时候就加上L;
基本数据类型转换问题