标签:正整数 生成 https 整型 工厂方法 必须 虚拟 字节码 最好
参考资料:《Effective Java》、《Java核心技术 卷1》
我们常见的基本类型,如int、long、float等,都有一个对应的包装器类。这些包装器类的名字和它们也非常对应,如:Integer、Long、Float等。
当我们像定义一个整型列表,但是尖括号里面是不允许写int的,这时候就需要用到Integer,如下:
ArrayList<Integer> arrayList=new ArrayList<Integer>();
当我们往这个集合添加数字的时候,其实就经历了自动装箱的过程
arrayList.add(3);
上面的代码实际上会自动变换成:
arrayList.add(Integer.valueOf(3));
这种变换就被称为自动装箱。
相反的,当我们将一个Integer类型的对象赋值给int时,将会自动地拆箱。
需要注意的几点:
1.Integer类型的比较要用equals。
2.装箱和拆箱时编译器认可的,而不是虚拟机。就像上面的变换一样,是由编译器去生成对应的字节码,虚拟机只是去执行这些字节码。
一般来说,最好能重用单个对象,而不是在每次需要的时候就创建一个相同功能的新对象。重用方式既快速又流行。
如果对象是不可变的,它始终可以被重用。
反面例子:
String str=new String("重用对象");
上面的语句每次被执行的时候都创建一个新的String实例。改进后如下:
String str="重用对象";
上面的代码中,对于所有在同一台虚拟机中运行的代码,只要它们包含相同的字符串,该对象就会被重用。
构造器在每次被调用时都会创建一个新的对象,而静态工厂方法不会这么做。
静态工厂方法:https://www.cnblogs.com/lbhym/p/11787505.html
要优先使用基本类型而不是包装器类。
书上给出的例子:
private static long sum(){ Long sum=0L; for(long i=0;i<=Integer.MAX_VALUE;i++){ sum+=i; } return sum; }
上面的程序必须使用long类型,因为int无法容纳int正整数的总和。
将sum声明成了Long,实际运行结果无误,但是时间却长了很多,每台机器可能不一样。
标签:正整数 生成 https 整型 工厂方法 必须 虚拟 字节码 最好
原文地址:https://www.cnblogs.com/lbhym/p/11813834.html