1. 几乎所有的操作符都只能操作基本类型,例外的操作符是"=","=="和”!=“,这些操作符能够操作所有的对象,除此以外,String类支持"+"和"+="。
2.当编译器观察到一个String后面紧跟一个"+",而这个"+"的后面又紧跟一个非String类型的元素时,就会尝试着将这个非String类型的元素转换为String。
3.基本类型存储了实际的数值,而并非指向一个对象的引用,所以在为其赋值的时候,是直接将一个地方的内容复制到了另一个地方。例如,对基本类型使用a = b ,那么b的内容就复制给a
4.两个Integer对象,== 和 != 比较的就是对象的引用。如果想比较两个对象实际内容是否相同,必须使用所有对象都适用的特殊方法equals()。需要重写覆盖equal方法。
5.按位操作符:输入位 0 , 1 按位"与"操作符(&) 按位"或"操作符(|) 按位"异或"操作符(^)
按位"非"操作符(-)取反操作符 按位操作符与逻辑操作符相同的效果,只是它们不会中途"短路"
6.移位操作符
操作的运算对象也是二进制的"位".,移位操作符只可用来处理整数类型(基本类型的一种)。左移位操作符(<<)能按照操作符右侧指定的位数将操作符左边的操作数向左移动(低位补0) 。有符号右移位操作符(>>)则按照操作符右侧指定的位数将操作符左边的操作数向右移动。有符号右移位操作符使用“符号扩展" : 若符号为正,则在高位插入0
如果对char,byte或者short类型的数值进行移位处理,那么在移位进行之前,它们会被转为int类型,并且得到的结果也是一个int类型的值。
7.类型转换操作符
假设我们为某浮点变量赋以一个整数值,编译器会将int自动转换成float。
窄化转换: 面临信息丢失的危险。编译器会强制我们进行类型转换,必须显式地进行类型转换
扩展转换: 不必显式地进行类型转换
截尾和舍入: 将float或double转型为整型值时,总是对该数字进行截尾。如果想要得到舍入的结果,就需要使用Math的round()方法
提升: 表达式中出现的最大的数据类型决定了表达式最终结果的数据类型。如果将一个float值与一个double值相乘,结果就是double ,char byte short进行算术运算,都会得到一个int型结果。
如果对两个足够大的int值执行乘法运算,结果就会溢出。