打字猴:1.700440758e+09
1700440758
1700440759 这就是int先加宽转变为long型,然后自动转换成Long型。规则说明白了,我们继续来看f(Integer.valueOf(i))是如何调用的,Integer.valueOf(i)返回的是一个Integer对象,这没错,但是Integer和int是可以互相转换的。没有f(Integer i)方法?没关系,编译器会尝试转换成int类型的实参调用,OK,这次成功了,与f(i)相同了,于是乎被加宽转变成long型—结果也很明显了。整个f(Integer.valueOf(i))的执行过程是这样的:
1700440760
1700440761 i通过valueOf方法包装成一个Integer对象。
1700440762
1700440763 由于没有f(Integer i)方法,编译器“聪明”地把Integer对象转换成int。
1700440764
1700440765 int自动拓宽为long,编译结束。
1700440766
1700440767 使用包装类型确实有方便的地方,但是也会引起一些不必要的困惑,比如我们这个例子,如果f()的两个重载方法使用的是基本类型,而且实参也是基本类型,就不会产生以上问题,而且程序的可读性更强。自动装箱(拆箱)虽然很方便,但引起的问题也非常严重—我们甚至都不知道执行的是哪个方法。
1700440768
1700440769 注意 重申,基本类型优先考虑。
1700440770
1700440771
1700440772
1700440773
1700440774 编写高质量代码:改善Java程序的151个建议 [:1700438098]
1700440775 编写高质量代码:改善Java程序的151个建议 建议30:不要随便设置随机种子
1700440776
1700440777 随机数在太多的地方使用了,比如加密、混淆数据等,我们使用随机数是期望获得一个唯一的、不可仿造的数字,以避免产生相同的业务数据造成混乱。在Java项目中通常是通过Math.random方法和Random类来获得随机数的,我们来看一段代码:
1700440778
1700440779 public class Client{
1700440780
1700440781 public static void main(String[]args){
1700440782
1700440783 Random r=new Random();
1700440784
1700440785 for(int i=1;i<4;i++){
1700440786
1700440787 System.out.println(“第”+i+“次:”+r.nextInt());
1700440788
1700440789 }
1700440790
1700440791 }
1700440792
1700440793 }
1700440794
1700440795 代码很简单,我们一般都是这样获得随机数的,运行此程序可知:三次打印的随机数都不相同,即使多次运行结果也不同,这也正是我们想要随机数的原因。我们再来看下面的程序:
1700440796
1700440797 public class Client{
1700440798
1700440799 public static void main(String[]args){
1700440800
1700440801 Random r=new Random(1000);
1700440802
1700440803 for(int i=1;i<4;i++){
1700440804
1700440805 System.out.println(“第”+i+“次:”+r.nextInt());
1700440806
1700440807 }
[ 上一页 ]  [ :1.700440758e+09 ]  [ 下一页 ]