3.1 打印语句
System.out.println(“aaa”+ b); +是连接字符串,有将b转换成String类型的过程。
3.4赋值
别名陷阱,在对象赋值是t1=t2;实际上,t1本身的引用被t2的覆盖掉(t1的引用被垃圾回收器回收),在修改t1时,t2也会跟着变化。用t1.a=t2.a,保证t1和t2的独立性。
操作符的操作是一个对象的引用
3.5算数操作符
Random类的使用方法,nextInt(max)函数,随机数为0-max中的最大数,为防止0变为除数,nexInt()+1;一般要加1操作。
Random rand = new Random(48);中48的作用,如果没有48,用默认值系统时间作为种子,在第一次执行时随机数为16,隔几秒执行随机数变化24或者其他。如果指定为48,无论你今天运行还是明天运行,输出结果随机数都是同一个。
3.7关系操作符
对于== 和equals()的不同情况应用
==在比较对象时,比较的是引用,即指向的地址。
要比较两个对象的内容(其中的字段值)是否相等,要用equals()。(不包括基本类型,基本类型用== 和 !=)
但是equals()在类中默认,是比较的引用。equals(Integer a,b)之所以返回比较内容的结果,是Integer类中,重写了equals函数。对于自己定义的类,如Dog之类的,要重写equals()函数才可以。
3.8 逻辑操作符
java中,不能将非布尔值当做布尔值,如i=10,不能直接(!i)
逻辑操作符中短路现象,a&&b&&c,如果b为false,c的逻辑值不需要再计算,如果正确的设计abc的顺序,可以提高计算性能。
3.9 直接常量
long double float 后面要加L,D,F相应的符号,0X为16进制hexadecimal 0打头为8进制。
指数计数法,1.39e-43f 表示 1.39* ,e这里表示10的幂,不是2.718
3.10 按位操作符
& | ~ 异或(^,10或01输出结果为1) &= |=^=
3.11 移位操作符
<< 左移,箭头所指的方向,在低位补0;
>> 有符号右移,符号为正,高位插入0,符号为负,高位插入1;
>>> 无符号右移,无论正负,在高位插入0.
<<=、 >>=、>>>=(对short byte无符号右移会出错)
3.12 三元操作符 if-else
i<10? i*100:i*10 ; 如果i<10成立,执行i*100,否则执行后一个。代码紧凑,但是不好理解。
3.13+操作符重载
int x,y,z;
print(“abc”+x+y+z); 与 print(“abc”+(x+y+z)); 不一样,后者先计算xyz的和,然后输出一个值。
3.14 使用操作符常犯的错误
= 和 ==两者之间的区别
3.15 类型转换操作符
narrowing conversion:如将double转化为int,会伴随信息丢失。
widening conversion:不会造成信息丢失。 int转为float
在narrowing时,信息是截尾的。(int)0.7=0;可以用Math中的round方法四舍五入,round(0.7)=1;
在计算时,默认将类型变大,避免信息丢失。
3.16 java中没有sizeof
sizeof最大的原因是为了移植,java不需要。
Boolean布尔型值,可用的操作比较少,不可加减等。只能赋值true false
char byte short在进行运算(+ - * /)时,数据类型会提升到int,必须强制转换结果才能赋值。char a=(int)(a+b);