首页 > 代码库 > 16.10.18学到的Java知识
16.10.18学到的Java知识
1.
突然间发现自己忘了关于自增自减运算符放在变量前后的区别是什么了?
于是乎,我查了资料。
如果只对自变量进行加1或减1的时候,放在前面和后面都是没有区别的。
但是,如果自增自减运算符使用在需要赋值给其他变量或与其他表达式进行计算时,那么就要注意了,因为这个时候自增自减运算符放在前面和后面就是有区别的了。
从图中可以很明显的看见,当进行赋值运算时,当运算符放在变量之后,是先取变量,然后在对变量进行加一或者减一的操作;当运算符放在变量之前的时候,是先对变量进行加一减一的操作,然后再取变量的值。
现在,经过这么一查,顿时对这个问题又加深了印象。
2.
用最有效率的方法计算出2*16等于几。
基于我浅薄的知识基础,第一眼看到这个问题,我真的是不明白,明明直接乘不就可以了么,难道JAVA中还有其他的运算可以计算2*16,。
于是经过我查阅资料,我了解到:
在计算机中,位运算的效率是最高的。所以要想找出最有效率的方法,应该从位运算入手。
Java的位运算提供了左移‘<<’,右移‘>>’和无符号右移‘>>>’运算符,a<<b,即a乘以2的b次方。所以2*16就写成了2<<4;位运算直接对数据进行二进制移位运算,而乘法运算要先在计算机中进行相应的转换,然后进行计算才能得到正确的结果。
综上所述,采用2<<4位运算才是最有效率的。
3.
为了证明第二个问题的正确性,我想知道一个程序运行的时间,于是乎,我就又上网查,
据了解:
“在程序的开头有一个变量记录起始时间,比如说,start = System.currentTimeMillis(),最后一行用一个变量记录结束时候的时间,比如说,end = System.currentTimeMillis(),两者相减即可,结果的单位是毫秒。
System.nanoTime();貌似精度更高吧。。实际测试System.currentTimeMillis()精度是16ms。。nanoTime是1-2ms” ,用这个方法,就可以得到程序运行的时间了,当然,我又发现了一个问题,就是,程序每次运行的时间都不一样,我猜测可能 是由于硬件或者是什么特殊的原因导致的。
4.
&是按位 与 运算,&&是逻辑运算符
5.
这在C++中很明显是对的,但是,在Java中,这样是编译不成功的。那么,为什么呢?
Java中默认的整数类型是int型,对于不同类型的数值进行计算时,结果总是转换为精度最高的数据类型,因此将计算结果赋值给变量时,这个变量的精度不能低于参加计算的精度最高的数据类型,否则就会发生编译错误。
16.10.18学到的Java知识