在最底层,java中的数据是通过使用操作符来操作的
一、优先级
当一个表达式中存在多个操作符时,操作符的优先级决定了计算顺序,但是经常会忘了复杂的优先级规则,所以可以用括号来明确计算规则。
注意:在System.out.println()中包含“ + ”操作符,在这种上下文中“ + ”意味着“字符串连接”,如果有必要,它还会执行“字符串转换”,尤其是String类型的元素后面跟一个“ + ”,而这个“ + ”的后面又紧跟着非String类型的元素。
二、赋值
分两种情况:
- 基本数据类型:这个没什么好说的,就是复制内容给另一个。
- 对象(String也是对象):我们真正操作的是对对象的引用,若是改变了初始的内容,那后面的引用的内容也将被改变,
例如:
Class Tank {
int level;
}
Tank t1 = new Tank();
Tank t2 = new Tank();
t1 = t2 ;
这就把t1和t2绑定为一个对象,t1里的level发生改变,t2也将发生改变。
但是
t1.level = t2.level;
就可以让两个对象保持彼此独立,而不是绑定到相同的对象,直接操纵对象里的域同意发生混乱。
三、自动递增和递减
分两种情况分析
- i++ 或 i- -(后缀式):先生成值,i再进行计算,相当于把 i 操作完再让它i = i + 1;
- ++i 或 - -i(前缀式):i先计算,再生成值,相当于先让 i 的值增加再对 i 进行操作
而在for循环遍历里就没有什么区别,最主要的区别就是当循环次数足够大时,++i的运行时间比i++少的多
四、类型转换操作符
原意:模型铸造,在适当的时候,java会将一种数据转换成另一种数据。
- 窄化转换:将容纳更多信息的数据类型转换成无法容纳那么多的数据类型,面临数据信息丢失的风险,所以编译器需要我们进行强制转换,例如 long 类型转换成 int 类型
- 扩展转换:不必进行显示的进行类型转换,因为新类型肯定能容纳原来类型的信息。例如:int 转换成 long 类型
些说的是基本数据类型,如果String 类型转换成 int 类型或者 char 类型,就需要别的来转换了。
最后提醒一下:两个足够大的 int 类型的值进行相乘,可能会溢出,如果你的结果出现2147483647或者出现-2147483647或者数值超过20亿的话建议改成 long 类型再重新计算