前段时间写Java一直忙于做工程上的工作,还是得停下来看看理论的东西。
基本类型
类型 | 存储需求 | 取值范围 | 备注 |
---|---|---|---|
int |
4 Bytes | $-2^{31}$ ~ $2^{31}-1$ | |
short |
2 Bytes | $-2^{15}$ ~ $2^{15}-1$ | |
long |
8 Bytes | $-2^{63}$ ~ $2^{63}-1$ | |
byte |
1 Byte | $-2^7$ ~ $2^7-1$ | |
float |
4 Bytes | 大约 $3.40282347E+38F$(有效位数6~7位) | 只有很少场景可以用到float |
double |
8 Bytes | 大约 $1.79769313486231570E+308$(有效位数15位) | 带小数点的默认是double |
char |
- | char 描述了UTF-16编码中的一个代码单元,尽量不要使用 |
|
boolean |
1 bit | true 和 false |
位运算
&
and|
or^
xor~
not
以(n & 0b1000) / 0b1000
为例,如果整数n
的二进制表示从左到右第4位是1,结果就是1,其余情况则为0。利用&
并结合适当的2的幂,可以把其他位mask掉,而只留下其中一位。
>>
和<<
运算符可以将位模式左移或者右移,需要建立位模式来完成掩码时,这两个运算符很方便。
1 << 3 == 0b1000 == 8
>>>
运算符会用0填充高位,这与>>
不同,后者用符号填充高位。不存在<<<
运算符。
输入输出
Scanner
就不多说了,只说比较有意思也最可能出现问题的Console.
|
|
然后很开心的执行一下,结果发现报错了
|
|
这个原因是
“If the virtual machine is started from an interactive command line without redirecting the standard input and output streams then its console will exist and will typically be connected to the keyboard and display from which the virtual machine was launched. If the virtual machine is started automatically, for example by a background job scheduler, then it will typically not have a console.”
简单说就是如果它是从命令行直接启动的就没问题,而如果是从一个【后台工作调度器】,其实也就是IDEA的工作线程启动的,就没有console了。所以要执行带有console的应用,就需要javac App.java && java App
了。
数组
Arrays
和List
在Java中是不同的数据类型(神奇的是为什么还有一个ArrayList
)。。。
Array数组表示的是【定长的数组,一旦确定了长度就不能再改变了】,而List列表则表示可以改变长度的列表。
Array的创建方式有很多,如下:
|
|