1:使用Java操作符
操作符接受一个或多个参数,并生成一个新值。
操作符可能会改变操作数自身的值,这被称为side effect。
注意:使用此类操作符生成的值,与使用没有副作用的操作符生成的值,没有什么区别。
(1)优先级
(1)赋值
= 他的意思是“取得右边的值,把它复制给左边”。
注意左值必须是一个明确的,已命名的变量。即:将一个常数赋给一个变量。不能是左值是常量:4=a;
一般情况下(基本类型存储的值):
a = b;意味着b的内容就复制给a。若接着又修改a,那么b不受影响,因为它实际上是直接将一个地方的内容复制到另一个地方。并不是对同一个空间的进行操作。
但特殊情况(对对象进行赋值时):对一个对象进行操作时,我们真正操作的是对对象的引用(reference)。所以倘若“将一个对象赋值给另一个对象”,实际是将引用从一个地方复制到另一个地方。这意味着假若对对象使用“c=d”,那么c和d都指向原本只有d指向的那个对象。
这种特殊的现象通常称为:aliasing(别名现象)
(a)方法调用中的别名问题。
(2)算术操作符(mathematical operator)
+ - * / %
注意:整数除法会直接去掉结果的小数位,而不是四舍五入。
(3) 正则表达式
java.util.regex.pattern.
grneral terms(通用术语) :
-?
一个数位用'/d'表示,但在java中“/”要两个才能显示(转义)"//d"
-?\\d+可能有负号数字有一个或多个。
(a)一元加减操作符:(一元加减号用于改变数据的符号)
x = -a;
x = a * -b; equals x = a * (-b);
(4) 自增自减increment decrement
i++ ++i
i-- --i
(5) 关系运算符relational operator
关系操作符号生成一个"Boolean"结果,他们计算的是操作对象之间的关系。
> >= < <= == !=
(a):测试对象的等价性。
对象是一个引用。只有基本类型可以用==,!=,否则equals()。
(6) 逻辑运算符logical operator
&& || !
(a)short-circuiting:短路
获得潜在的性能提升。
(7) 位操作符bitwise operator.
位操作符允许我们操作一个基本数据类型中的整数型的单个“bit”,即二进制位。位操作符会对两个参数对应的位操作执行布尔代数运算,并最终生成一个结果。
原理:
如果两个输入位都是1,则按位“于“操作符(&)生成一个输出位1;否则生成一个输出位0;
如果两个输入位里只要有一个是1,则按位"或",操作符(|)生成一个输出位1;只有在两个输入位都是0的情况下,他才会生成一个输出位0。
如果两个输入位的某一个是1,但不全是1,那么”异或“操作符(^)生成一个输出位1。(以上都是二元操作符)
按位"非"属于一元操作符;他只对一个操作数进行操作。
**
位操作符和逻辑操作符都使用了同样的符号。
位操作符可与等号联合使用,以便合并运算操作和赋值操作:
&= |= ^= 一元位运算符~不能被联用。
(8) 移位操作符(shift operator)
god of field
<< <<= >> >>=
>>> >>>= <<< <<<=
(9) 三元操作符(if else)
boolean -exp? value0 : value1
-exp 是true,最终结果为value0,否则是value1
(10) 逗号操作符(comma operator)
用法:函数分隔,作为后续计算的一个操作符。在java中,需要用到逗号的唯一场合就是for循环。
(11) 字符串操作符+
特殊用途:连接不同的字符串。
一个特殊点:
int i = 0,j = 1, k = 2;
String s = "X,Y,Z";
System.out.println(s+i+j+k);//xyz012
System.out.println(i+j+k+s);//3
System.out.println(i+j+s+k);//1xyz2
(12) 使用操作符时常犯的错误
(a)优先级不确定,没有用括号来确定。
(b)=赋值运算使用错误。或与==混淆。
(13) 类型转换操作符(casting operator)
(a)直接常量(Literal)
如果在一个程序里使用了literal,编译器可以准确的直到要生成什么样的类型,但有时却模棱两可,如可发生这种情况,必须对编译器加以适当的"指导",用于直接搭配某些字符来增加一些信息。
**********
Base 16 :使用于所有整数数据类型,以一个前缀0x或0X来表示,后面跟随0~9或大小写的a~f。
如果试图将一个变量初始化超出自身表示范围的值(无论这个值的数值形式如何)。
如果超出范围,编译器会将其值自动转换成一个int。(小范围到大范围是会报越界错误)
**********
Base 8:是有前缀0以及后续的0~7的数字组成的。
*
直接常量后面的后缀字符标志了它的类型。
若为大写或小写的L,代表long;
若为大写或小写的F,代表float;
若为大写或小写的D,代表double;
*
指数总是采用一种很不直观的记号方法:1.39e-47f.
与C和C++不同,在java中1.37*10^(-47)。
**********
提升(Promotion)
类型转换自动向大跃迁。
(14) java没有'sizeof'
sizeof();获取为数据存储分配的字节数。在c和c++中。
(15) 再论优先级(precedence)
**********有点弄不清楚。
(16) 操作符总结。
2:流程控制
true和false
if-else
迭代(iteration)
break和continue
开关(switch)
关键字:if else ,while , do while , for ,switch case.
(1)true和false
for example: if(a!=0)
(2)if-else
好用法:return.
(3)迭代(iteration)
关键字:while,do-while,for。
********
while(Boolean-expression){
statement}
********
do
statement
while(Boolean-expression);
注意:while和do-while 的区别是do-while 的语句至少执行一次。
********
for(initialization ; Boolean-expression;step)
statement
(4)break和continue
break:用于强行退出循环,不执行循环中剩余的语句。
continue:则停止执行当前的迭代,然后退回循环起始处,开始下一次迭代。
(5)开关(switch)
根据一个整数表达式的值,swith语句可以从一系列代码中选出一段去执行。
switch(integral-selector){
case
integral-value1 :statement ; break;
case integral-value2 :statement; break;
case integral-value3 :statement; break;
default : statement;
}
integral-selector: 是一个能够产生整数数值的表达式。
swith 能将integral-selector的结果与每个整数值(integral-value)相比较。若发现相符,就执行对应语句。若没有发现相符的,就可执行default语句。
*省列break;将会继续执行后面的case,直到default。
switch语句是实现多路选择的一种干净利落的方法。
计算细节:
Math.random()输出值范围:[0,1).