在最底层,Java中的数据是通过使用操作符来操作的。
一、基本数据类型
(1)整数类型:
①byte:1个字节,8位
②short:2个字节,16位
③int:4个字节,32位
④long:8个字节,64位
(2)字符类型:
①char:2个字节
②char类型用单引号括起来,而字符串使用双引号;
(3)浮点型:
①float:单精度。4个字节,32位,第1位符号位,接下8位表示指数,再接下来23位表示尾数;
②double:双精度。8个字节,64位,第1位符号位,接下来11位表示指数,再接下来52位表示尾数。
(4)布尔型
boolean:1位。true/false。
二、赋值
(1)基本数据类型使用“A=B”,那么B处的内容就复制到A。若修改A,那么B根本不会受修改的影响。
(2)对象“赋值”的时候情况发生了变化。对一个对象进行操作时,我们真正操作的是它的句柄。所以倘若“从一个对象到另一个对象”赋值,实际就是将句柄从一个地方复制到另一个地方。这意味着假若为对象使用“C=D”,那么C和D最终都会指向最初只有D才指向的那个对象。
short s1 = 1; s1 = s1 + 1; //(s1+1运算结果是int型,需要强制转换类型)
short s1 = 1; s1 += 1;//(可以正确编译) +=运算符无类型转换问题
三、算术运算符
(1)Java的算术运算符:加号(+)、减号(-)、除号(/)、乘号(*)以及模数(%,从整数除法中获得余数)。
(2)整数除法会直接砍掉小数,而不是进位。
四、自动递增、递减
(1)对于前递增和前递减(如++A或–A),会先执行运算,再生成值。
(2)对于后递增和后递减(如A++或A–),会先生成值,再执行运算。
五、关系运算符
(1)关系运算符包括<、>、<=、>=、= =、!=。
等于和不等于适用于所有内建的数据类型,但其他比较不适用于boolean类型。
(2)想对比两个对象的实际内容是否相同,必须使用所有对象都适用的特殊方法equals()。equals()方法不适用于“基本类型”,那些类型直接使用= =和!=即可。equals()的默认是比较句柄。所以除非在自己的新类中改变了equals(),否则不可能表现出我们希望的行为大多数Java类库都实现了equals(),所以它实际比较的是对象的内容,而非它们的句柄= =和! =比较的是对象句柄,而不是对象的实际内容。
六、逻辑运算符
(1)&&:与(若第一个操作数返回false,将不再对第二个操作数进行求值)
(2)&:不短路与(两个操作数都进行求值)
(3)||:或(若第一个操作数返回true,将不再对第二个操作数进行求值)
(4)|:不短路或(两个操作数都进行求值)
(5)!:非
(6)^:异或,当两个操作数不同时才返回true。
七、按位运算符
(1)&:按位与
(2)|:按位或
(3)~:按位非
(4)^:按位异或(相同为0,不同为1)
八、移位运算符
(1)左移位运算符(<<)能将运算对象向左移动运算符右侧指定的位数(在低位补0)。
(2)有符号右移位运算符(>>)将运算对象向右移动运算符右侧指定的位数。有符号右移位运算符使用了符号扩展:若值为正,则在高位插入0;若值为负,则在高位插入1
(3)无符号右移位运算符(>>>),它使用了“零扩展”:无论正负,都在高位插入0
九、三元if-else运算符
布尔表达式 ? 值0:值1
布尔表达式”的结果为true,就计算“值0”,否则计算“值1”
十、字符串运算符+和+=
int x = 0, y = 1, z = 2;
System.out.println(“out:” + x + y + z);
在这里,Java编译程序会将x,y和z转换成它们的字串形式,而不是先把它们加到一起。
运用“String +”时,若表达式以一个String起头,那么后续所有运算对象都会转换到字串。
想通过“加号”连接字串(使用Java的早期版本),请务必保证第一个元素是字串。