操作符,操作数,副作用:操作符作用在操作数上产生新值,如果操作符改变了操作数自身的值,被称为副作用
优先级,( )括号搞定一切
赋值操作符:= 这个符号作用域栈stack,,
1,基本数据类型,就是值传递,两个内存空间,存两个值
2,引用数据类型,别名现象传递 引用,两个参数存放一个引用,指向同一个 heap区。方法参数如果是对象,也是传递了引用
算数运算符:+,-,*,/,% 加减乘除,取模
@Testpublic
void txfloat() {
// TODO 自动生成的方法存根 int a=9; int b=7;
DecimalFormat df=new DecimalFormat("0.00");
System.out.println(df.format((float)a/b));
System.out.println(df.format(a/(float)b));
System.out.println(df.format((float)a/(float)b));
System.out.println(df.format((float)(a/b)));
}
结果1.29,1.29,1.29,1.00.
算数运算,会自动提高到两数的最高精度,然后计算float强制转换后精度提高,运算的时候是两个float在计算。而最后一个是运算结果强制转换为float,,1——1.00
而且,在整数除法中还有注意9/5=1,,,自动去掉小数部分,而不是四舍五入。是直接去掉
算术运算符+赋值运算符 +=,-=,*=,/=,%=,,做运算再赋值。我从来不这么写,体现不出高水平,有时候会很乱,打断点也麻烦,代码的高水平在于格式,在于思想。还有x=a*-b,jdk能识别,人阅读代码有些不合习惯,所以加括号x=a*(-b)
自增,自减:++,--。i--,--i,i++,++i..符号在前就先对i加减在运算别的,i在前,就先运算别的,在对i加减
关系运算符:==,!=,<,>,<=,>=,,返回布尔值 boolen
==,equals:==判断stack是否相等,所以,基本数据类型只在乎数值就好,引用数据类型,只是对比引用地址
int a=1;
int b=1;
System.out.println(a=b); true,因为a,b两个值存在stack中,直接对比
Integer a =new Integer ();
Integer b =new Integer ();
System.out.println(a=b); false,因为a,b两个值存在heap中,a,b两个引用只是地址指向两个heap,
equals是一个Object的方法,所有类都继承了Object。eqauls的实现默认就是 ==,所里他俩一样,区别就是,equals是个方法,可以重写,也就有了
false
true;
如果是你自己写的类,请不必重写equal方法,比如person,包括身高,体重,姓名,身份证号,年龄,学历。但是两个人怎么判断是一个人,就要重写equals方法,判断姓名,身份证号相等即可
逻辑运算符,按位运算符:或(有true得true,有1得1),且(有false得false,有0得0),非,异或(同为false,异为true,同为0,不同为1)
按位运算符:操作对象 整数 基本数据类型 对应的位(bit)
操作 布尔代数运算
&,&&;|,||,短路,参见:https://blog.csdn.net/Agly_Clarlie/article/details/50521888
^异或应用,两数互换:参见:https://blog.csdn.net/lambyuyu/article/details/5543289 个人不建议用,有些同学不能迅速理解代码
位移操作符:2+1 << >> >>>:操作对象,二进制的位:byte short int char 都做 int处理,结果也是int,long做long处理,结果也是long
<<左移操作符:左侧溢出位舍去,右侧补充 0,
>>右移操作符:右侧溢出位社区,右侧补充符号为,整数补0,负数补1(右移之前,最高位是啥就补啥)
>>>无符号右移:补充 0,,,(c语言没有这个)
唯一个三元运算符:Boolean-exp?value0:value1