看到这么行代码
private static final int DEFAULT_SIZE =2 << 24 ;
不大理解,请解疑
这里DEFAULT_SIZE=2 << 24的结果是一个int常量33554432,为什么要用左移运算 而不直接写上常量33554432?
0000 0000 0000 0000 0000 | 0000 0000 0000 0010
左移24,得
0000 0010 0000 0000 0000 | 0000 0000 0000 0000
相当于2的一次方
左移24,得
2的25次方
写成这样就是为了直观的表示2的25次方
开发的时候很少有java程序员会这样写的。在C或者C++中习惯这样。
因为Java程序员对内存管理上根本就不怎么在乎,因为有GC,所以都没人在乎了。
Java中习惯
推荐(Integer.MAX_VALUE)
就好比以秒定义一天一样,写成
int ONE_DAY = 24 * 60 * 60;
和
int ONE_DAY = 86400;
哪个更易读更易维护?
之所以用左移而不是乘其实是因为效率,左移的话会比乘法快些
这得问那个写这代码的兄弟了,可能他觉得这样比较帅!仅此而已!
sprite311 正解
另外补充一点:因为这是个static final常量,后面表达式的内容在编译期就会被计算出来,在运行期不会重复计算,在运行效率上跟直接使用数字常量是一样的。