上图为 Java 数据类型的基本分类,下民逐个来进一步进行总结。
int
在 java 中 int 不分系统,固定为 4 个字节。并且在 java 中没有无符号数,只有有符号数 。 int 表示的范围大小为 -2147483648 —— 2147483647 。可以用 Integer.MAX_VALUE 取到 int 的最大值,取最小值则为 Integer.MIN_VALUE 。
long
在 java 中 long 不分系统,固定为 8 个字节。同样在 java 中没有无符号数,只有有符号数 。可以用 Long.MAX_VALUE 取到 int 的最大值,取最小值则为 Long.MIN_VALUE 。
double & float
Java 中 double 固定占 8 个字节, float 固定占 4 个字节。double 为双精度浮点数,float 为单精度浮点数。浮点数在计算时会存在一定误差。通常我们建议浮点数使用 double 。
char
在 java 中 char 是 2 个字节,他可以表示一个汉字。(和 C语言中的 char 是完全不同的)
byte
byte 占 1 个字节,他对标的是 C 语言中的 char。
short
short 占 2 个字节,表示的数据范围是-32767——32768.
注意⚠️:short 和 char 是两种完全互不相干的类型,更不能相互转换。
boolean
boolean 类型的变量只有两种取值, true 表示真,false 表示假。
boolean 类型和 int 不能相互转换,不存在 1 表示真,0表示 false 这样的用法。
String
形如"hello" 这样的字符串常量类型,也就是 String 类型。
字符串可以相加,相当于字符串拼接。
long 和 int 相互赋值
只能将表示范围小的赋值给表示范围大的。否则会发生截断。如果确实想赋值,可以使用强制类型转换。
注意⚠️:
byte a = 10;
byte b = 20;
byte c = a + b;
这样的代码是会报错,因为 a + b 的结果会先被转换成 int 在赋值给 c ,int 表示的范围比 byte 大,所以就会出错。
运算符
- 基本四则运算 + - * / %
0 不能作为除数,并且 Java 中 不仅仅可以对 int 求模,也能对 double 求模。
- 增量赋值运算符 += -= *= /= %=
int a = 10;
a += 1;
//等价于 a = a + 1;
- 自增自减运算符 ++ –
如果++或-- 不去取表达式的返回值的时候,就是等价的。前置++ 返回的是自增之后的值,后置++返回的是自增之前的值。
- 关系运算符 == != < > <= >=
关系运算符的表达式的返回值都是 boolean 类型 - 逻辑运算符
&& || !
逻辑运算符的操作数(操作数往往是关系运算符的结果)和返回值都是boolean。
(短路求值是如果某一个表达式能整个表达式的结果,则后面的表达式不再执行)
在 java 中 & 和 | 也是 && 和 || 的意思,只不过后者不支持短路求值。 - 位运算符 & ! ~ ^
按位 & :相同为 1 则为 1 ,否则为 0
按位 | :相同为 0 则为0, 否则为 1
按位取反~:该位是0则转为1,是1则转为0
按位^:相同则为0,相异则为1 - 移位操作符:<< >> >>>
左移(<<):最左侧为不要了,最右侧补0
右移:算术右移(>>)左侧补符号位
逻辑右移(>>>)左侧补0 - 条件运算符
表达式1 ?表达式2 : 表达式3
表达式1条件成立则返回表达式2,否则返回表达式3。