1.赋值:使用操作符“=”、意思为:“取右边的值(即右值),把它复制给左边(即左值)”。右值可以是任何常数、变量、表达式(只要能生成一个值就可以),但左值必须是一个明确的、已命名的变量。

a.对基本类型赋值,是直接将一个地方的内容复制到另一个地方。

b.别名现象:现有一个类class Tank{int level;}

Tank t1 = new Tank();

Tank t2 = new Tank();

t1.tank = 9;

t1.tank = 47;

t2 = t1;

t1.level = 27;

这时看,首先对每个Tank对象的level域都赋予了一个不同的值;然后t2赋值给t1,接着修改t1;

由于赋值操作的是一个对象的引用,所以修改t1的时候也修改了t2;由于t1、t2包含的是相同的引用,指向相同的对象;

这种将t1和t2绑定在同一对象上的操作就会产生别名现象;而为了保持两个对象彼此独立,采用t2.level=t1.level;这时会发现,直接操作对象内的域容易导致混乱;应该注意对对象赋值可能会产生意想不到的结果。

2.算数操作符:+、-、*、/、%;可以与赋值操作符一起使用(x+=4)

3.自增、自减:++、--

a.前缀自增/减:先执行运算,再生成值;

b.后缀自增/减:先生成值,再执行运算(先生成表达式的值,再对变量赋值);

3.关系操作符:生成的是一个boolean结果,计算的是操作数的值之间的关系;

a.测试对象的等价性:自我感觉这是一个重点

对于对象实际内容的比较用equals(),对所有对象都实用;

==和!=比较的是对象的引用,基本类型的比较也是==和!=进行比较;

b.对于自己创建的类:

假设Value a = new Value();

  Value b = new Value();

  v1.i = v2.i =100;

这时对a.equals(b);输出为false;这是因为equals()的默认行为是比较引用。所以要得到自己希望的行为,要在新类中覆盖equals()方法。

4.逻辑操作符:&&、||、!

与C和C++不同之处、不可将非布尔值当做布尔值在逻辑表达式中使用;

其中“短路”现象:即一旦能够明确无误的确定整个表达式的值,就不再进行表达式余下部分的计算。

5.三元操作符:boolean-exp ? value0 : value1

即boolean-exp(布尔表达式)的结果为true,计算value0,计算的值即为表达式最终值;反之,计算value1.

6.常见错误:

按位“与”“或”(&、|),而逻辑“与”“或”(&&、||)不同;“=”与“==”不同;

7.“窄化转化”:可能会造成数据丢失;在char、byte、short中,对其进行算数运算,会得到一个int结果;必须将其显示的类型转化回原来的类型,以将值赋给原本的类型;