一、java运算符
掌握主类型的概念、与之相对的对象的概念
1.1 同一个类的对象之间的赋值,改变的是被赋值的对象的引用
例如://n1和n2指向不同的对象
n1 = n2; //执行后,n1对象丢失,它的对象会由“垃圾收集器”自动清除 ,n1也指向n2的对象
1.2 将对象传递到方法内部时,也会产生别名现象,在方法内部对对象的修改,会影响到方法外面的对象
关于别名的详细说明见第12章
1.2 算术运算符、逻辑运算符、按位运算符、移位运算符
算术:“+”,“-”,“*”,“/”,“%”
逻辑:AND(&&) , OR(||) , NOT(!)
按位:AND(&) , OR(|) , XOR(^) , NOT(~) , 可以与等号联合使用,以便合并运算及赋值:&= , |= , ^=, 由于~是一元运算符,所以不能与=联合使用
对于布尔boolean类型,我们可以当作一种“单位”或“单比特”值对待,所以它多少有些独特的地方。
我们可以执行按位AND,OR,XOR,但不能执行按位NOT(大概是为了避免与逻辑NOT混淆)。对于布尔值,按位运算符具有与逻辑运算符相同的效果,只是它们不会中途“短路”。
此外,针对布尔值进行的按位运算为我们新增了一个XOR罗运算符,它并未包括在“逻辑”运算符的列表中。在移位表达式中,我们被禁止使用布尔运算。
移位运算符:左移位(<<), 有符号右移位(>>), 无符号右移位运算符(>>>)
左移位(<<)运算符能将运算符左边的运算对象移动运算符右侧指定的位数(在低位补0)。
有符号右移位(>>)运算符能将它左侧的数移动右侧指定的位数,若左侧数为正数,则在高位补0,若左侧为负数,则在高位补1;
无符号右移位运算符(>>>),不管它左侧是正数还是负数,都只在高位补0;(这一运算符C/C++中是没有的)//嵌入式软件中用得多,暂且不管。
1.3什么叫句柄?
类似于指针,详细说明见:http://wenku.baidu.com/link?url=Mlb0uwHany4rfzpOjO1sbLOsDkpofRGMbLgUocy-7cnsYsl3NDIK6deaDOqZXkzqz9XSq2VJT2aO8ibOI0MTCCPpOtEqXJYUcK3WE9YwOCK
1.4字符串运算符“+”
算术运算符“+”的重载,若x,y,z是int变量,则下述表达式会先将x,y,z转换成字符串形式,再连接起来,而不是先将整数值相加
System.out.println("output:"+x+y+z);
1.5运算符常规操作规则
错误示例:(如果x,y是整型变量)
while(x = y) {
//...
}
x=y运算结果是一个int数值,而编译器期望的是一个布尔值,java中,int数值不会转换成布尔值
1.6造型运算符(强制转换运算符)
将一种数据类型自动转换成另一种,例如,假设我们为浮点变量分配一个整数值,计算机会将int自动转换成float。
既可对一个变量进行强制转换,也可以对一个数值进行强制转换。
缩小转换(Narrowing Conversion):比如将long转换成int,是危险的。面临丢失信息的风险。因此必须明确造型。
但是对于放大转换(Widening conversion): 比如int转换成long, 则不必进行明确造型,因为不会丢失信息。
以e为低的对数是10的幂次方,而不是自然对数的幂次方.
float f4 = 1e-47f; //编译器通常会将指数作为双精度(double)处理,所以假如没有这个尾随的f,就会收到一条出错提示,告诉我们必须用一个“造型”将double转换成float.
转型:假若对主数据类型执行任何算术或按位运算,只要它们比int小(如char, byte或者short), 那么在正式执行运算之前,哪些值会自动转换成int. 要把一个值赋回较小的类型,就必须使用个“造型”。而且会有信息丢失的风险。
通常,表达式中最大的数据类型是决定了表达式最终结果大小的那个类型,若将一个float值与一个double值相乘,结果就是double, int 和 long 相加,结果是long。
1.7 java中没有"sizeof()"运算符
java是一种与平台无关的语言,所有数据类型在所有机器上的大小都是相同的。
二、执行控制
if-else
while
do-while
for, for循环中的 “ ; ” ,不是逗号分隔符, 而是逗号运算符,java中该运算符仅在for循环中使用
break
continue
switch